{
  "openapi": "3.1.0",
  "info": {
    "title": "Локальний API хмарного телефону",
    "description": "Керуйте екземплярами хмарних телефонів через локальний API MoreLogin. Базова URL-адреса: http://127.0.0.1:40000. Локальний API працює на вашому комп'ютері разом із настільним додатком MoreLogin. Усі запити повинні надходити з того самого комп'ютера.",
    "version": "2026-09-05"
  },
  "tags": [
    {
      "name": "Cloud Phone Management",
      "description": "API для розділу «Cloud Phone Management»."
    },
    {
      "name": "Live Streaming",
      "description": "Запуск, перевірка та зупинка прямої трансляції хмарного телефона."
    },
    {
      "name": "Account & Quotas",
      "description": "Запит балансу гаманця та квот використання хмарного телефона."
    },
    {
      "name": "ADB",
      "description": "API для розділу «ADB»."
    },
    {
      "name": "Files",
      "description": "API для розділу «Files»."
    },
    {
      "name": "Apps",
      "description": "API для розділу «Apps»."
    },
    {
      "name": "Schedules",
      "description": "API для розділу «Schedules»."
    },
    {
      "name": "Touch",
      "description": "API для розділу «Touch»."
    },
    {
      "name": "Monthly Billing",
      "description": "Отримання доступних місячних планів і активація Cloud Phone на місяць."
    }
  ],
  "x-tagGroups": [
    {
      "name": "",
      "tags": [
        "Cloud Phone Management",
        "Live Streaming",
        "Account & Quotas",
        "ADB",
        "Files",
        "Apps",
        "Schedules",
        "Touch",
        "Monthly Billing"
      ]
    }
  ],
  "paths": {
    "/api/balance": {
      "get": {
        "operationId": "getAccountAndCloudPhoneQuotasLocal",
        "summary": "Отримати баланс і доступні ресурси Cloud Phone",
        "description": "Повертає баланс гаманця команди та доступні обсяги використання хмарних телефонів.\n- **Передумови**: учаснику, який викликає, потрібне право на витрати. Гаманець шукається за командою, тому ці цифри стосуються всієї команди, а не окремого учасника.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Одиниці**: `balance` — баланс гаманця **у центах**, а не у грошових одиницях. `remainingDuration` — залишок хвилин хмарного телефона, `remainingConcurrency` — кількість слотів; обидва обмежуються нулем і не йдуть у мінус.\n- **Вміст**: рівно ці три числа. Заморожені суми гаманця, розподіл витрачених і наданих хвилин та дати спливання існують вище в стеку, але тут навмисно не публікуються.\n- **Примітка**: виклик падає цілком, якщо не вдався запит гаманця або запит квот; часткові цифри він не повертає.",
        "tags": [
          "Account & Quotas"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BalanceResponse"
          }
        }
      }
    },
    "/api/cloudphone/monthly/skus": {
      "get": {
        "operationId": "listMonthlyCloudPhoneSkus",
        "summary": "Список доступних місячних планів Cloud Phone",
        "description": "Повертає місячні продукти Cloud Phone, доступні команді.\n\n- **Ефект**: відсутній; запит не резервує ємність і не списує баланс. Лише читання.\n- **Використання**: передайте отриманий `skuId` до [`/api/cloudphone/create`](./local-api.yaml#operation/createUsingPOST). Ціна в центах США, строк — 30 днів.\n- **Порожній результат**: порожній масив `data` означає, що доступних місячних продуктів немає.\n\nТипові помилки див. у [Error Codes](../Getting%20Started/error-codes.md).\n- **Версія клієнта**: потрібен MoreLogin Desktop v2.65.0 або новіший; старі версії не надають цей маршрут Local API.",
        "tags": [
          "Monthly Billing"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneSkusResponse"
          }
        }
      }
    },
    "/api/cloudphone/monthly/activate": {
      "post": {
        "operationId": "activateMonthlyCloudPhones",
        "summary": "Придбання й активація Cloud Phone на місяць",
        "description": "Купує та активує від 1 до 10 місячних Cloud Phone на 30 днів.\n\n- **Попередження**: **операція реально списує кошти з балансу команди.**\n- **Дозвіл**: потрібне право **Керування витратами/платежами**, інакше повертається `99012`.\n- **Спочатку створіть**: використайте [`/api/cloudphone/create`](./local-api.yaml#operation/createUsingPOST); створення дає неактивні записи й не списує кошти.\n- **Вибір**: ID мають бути унікальними, належати команді та використовувати активні 30-денні продукти. Різні місячні SKU можна змішувати. Несумісні стани чи замовлення, очікувані клієнтські замовлення та паралельні покупки відхиляють увесь запит.\n- **Списання й відновлення**: перевірка та списання виконуються цілком. Для одного оплаченого замовлення право відновлюється без повторного списання. Local API, Open API і клієнт мають спільний стан замовлення.\n- **Завершення**: підтверджує 30 днів для всіх; не вмикає телефони й автоподовження.\n- **Непідтверджена активація**: при `33422` `data.results` лишається повним і впорядкованим. Перевірте `status`, `expireTime`, `errorCode`.\n- **Повтор**: після таймауту запитайте [`/api/cloudphone/info`](./local-api.yaml#operation/infoUsingPOST) або [`/api/cloudphone/page`](./local-api.yaml#operation/pageUsingPOST).\n\nПомилки: `20002`, `20003`, `20004`, `20008`, `20041`, `20055`, `20068`, `20070`, `20071`, `33420`, `33421`, `33422`, `99001`, `99002`, `99012`. Див. [Error Codes](../Getting%20Started/error-codes.md).\n- **Версія клієнта**: потрібен MoreLogin Desktop v2.65.0 або новіший; старі версії не надають цей маршрут Local API.",
        "tags": [
          "Monthly Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonthlyCloudPhoneActivateRequest"
              },
              "example": {
                "ids": [
                  "1724032706822188",
                  "1724032729890861"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneActivateResponse"
          }
        }
      }
    },
    "/api/cloudphone/live/start": {
      "post": {
        "operationId": "startCloudPhoneLiveStreamingLocal",
        "summary": "Почати пряму трансляцію",
        "description": "Запускає пряму трансляцію раніше завантаженого MP4 на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди, і його Сервіс має підтримувати прямі трансляції . `fileId` має посилатися на файл, завантажений як медіа для трансляції, вивантаження якого завершилося; усе інше відхиляється як недопустиме або протерміноване.\n- **Завершення**: **прийнято, але не завершено.** Відповідь лише підтверджує, що Сервіс прийняв запит. Опитуйте `/cloudphone/live/status`, доки `liveStatus` не стане `1`.\n- **Примітка**: обмеження «лише MP4» застосовується під час вивантаження файлу, а не тут.\n- **Повтор**: дедуплікації немає; повторний виклик знову надсилає команду запуску.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`, `33418`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLiveStartRequest"
              },
              "example": {
                "phoneId": "190000000000000001",
                "fileId": "820000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/api/cloudphone/live/status": {
      "post": {
        "operationId": "getCloudPhoneLiveStreamingStatusLocal",
        "summary": "Отримати статус трансляції",
        "description": "Повідомляє, чи веде хмарний телефон пряму трансляцію на цей момент.\n- **Передумови**: телефон має належати вашій команді, а його Сервіс — підтримувати прямі трансляції. На відміну від запуску та зупинки, телефону **не** потрібно бути увімкненим чи зайнятим вами.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Значення**: `liveStatus` дорівнює `0` (трансляції немає) або `1` (триває трансляція). **Стану помилки не існує**: запуск, який так і не подіяв, просто залишається в `0`, тому обмежте опитування таймаутом.\n\nЗадокументовані бізнес-помилки: `33300`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveStatusResponse"
          }
        }
      }
    },
    "/api/cloudphone/live/end": {
      "post": {
        "operationId": "stopCloudPhoneLiveStreamingLocal",
        "summary": "Завершити пряму трансляцію",
        "description": "Зупиняє пряму трансляцію на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди, і його Сервіс має підтримувати прямі трансляції. **Чи справді триває трансляція, не перевіряється**: команда зупинки надсилається в будь-якому разі.\n- **Завершення**: прийнято, але не завершено. Опитуйте `/cloudphone/live/status`, доки `liveStatus` не стане `0`.\n- **Повтор**: ідемпотентний за результатом; повторний виклик просто надсилає команду зупинки знову.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/api/cloudphone/uploadFile": {
      "post": {
        "summary": "Завантаження файлів",
        "deprecated": false,
        "description": "Вивантажує локальний файл напряму на хмарний телефон (застарілий multipart-сценарій).\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Код вивантаження, отриманий на кроці передпідписаного URL, одноразовий.\n- **Завершення**: відповідь лише підтверджує, що Local API прийняв передавання. **Ані ідентифікатора завдання, ані стану для опитування не надається**, тому спостерігати за прогресом неможливо.\n- **Використовуйте замість цього**: `/api/cloudphone/upload/file/signedUrl` → `PUT` → `/api/cloudphone/upload/file` → `/api/cloudphone/upload/file/result`, коли потрібен спостережуваний прогрес і опрацювання повторів.\n- **Примітка**: цей шлях — не та сама операція, що `/cloudphone/uploadFile` в Open API, який реєструє вже завантажений об'єкт.\n\nЗадокументовані бізнес-помилки: `33401`, `33419`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "fileUploadUsing",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "id",
                  "file",
                  "uploadDest"
                ],
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string",
                    "examples": [
                      "1661515884160372"
                    ],
                    "example": "1661515884160372"
                  },
                  "file": {
                    "format": "binary",
                    "type": "string",
                    "description": "File to upload",
                    "examples": [
                      "file://D:\\application\\apifox\\LICENSE.electron.txt"
                    ],
                    "example": "file://D:\\application\\apifox\\LICENSE.electron.txt"
                  },
                  "uploadDest": {
                    "description": "Upload destination directory",
                    "type": "string",
                    "examples": [
                      "/Download"
                    ],
                    "example": "/Download"
                  }
                }
              },
              "example": {
                "id": "1661515884160372",
                "file": "file://D:\\application\\apifox\\LICENSE.electron.txt",
                "uploadDest": "/Download"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The Local API accepted the direct upload and returns an empty JSON object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "maxProperties": 0,
                  "properties": {}
                },
                "example": {}
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/upload/file/signedUrl": {
      "post": {
        "operationId": "getCloudPhoneUploadSignedUrlLocal",
        "summary": "Отримати тимчасову URL-адресу файлу для завантаження",
        "deprecated": false,
        "description": "Запитує передпідписаний URL для вивантаження файлу, який отримає хмарний телефон.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Завершення**: синхронне. **Передпідписаний URL дійсний одну годину.** Надішліть вміст файлу методом `PUT`, а потім зареєструйте вивантаження через `/api/cloudphone/upload/file`.\n- **Примітка**: тимчасові об'єкти видаляються автоматично через 7 днів.\n- **Примітка про поверхню API**: це та сама реалізація, що й `/cloudphone/uploadUrl` в Open API.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "fileName": {
                    "type": "string",
                    "description": "File name"
                  }
                },
                "required": [
                  "fileName",
                  "id"
                ]
              },
              "example": {
                "fileName": "icon.png",
                "id": "1666625111121936"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `presignedUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "presignedUrl": {
                          "type": "string",
                          "description": "Upload file url.Please use HTTP PUT request for file upload"
                        }
                      },
                      "required": [
                        "presignedUrl"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ],
                  "description": "Response code, 0 indicates success,>0 indicates failure"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "presignedUrl": "https://example-bucket.s3.amazonaws.com/prod/cloudPhoneOpenApi/1666625111121936/20260901/demo.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Signature=EXAMPLE"
                  },
                  "requestId": "d0b850e2c3d54279b524e9540a358e0a"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/upload/file": {
      "post": {
        "operationId": "uploadCloudPhoneFileByUrlLocal",
        "summary": "Завантажте файл для URL-адреси",
        "deprecated": false,
        "description": "Реєструє раніше завантажений файл, щоб хмарний телефон його отримав.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди, і **об'єкт уже має існувати за вказаним URL**. Вивантаження для прямої трансляції мають бути у MP4 і призначатися Сервісу, який підтримує трансляції.\n- **Завершення**: **прийнято, але не завершено.** Відповідь повертає `fileId` зі статусом «у процесі»; опитуйте `/api/cloudphone/upload/file/result`.\n- **Примітка про поверхню API**: це та сама реалізація, що й `/cloudphone/uploadFile` в Open API. Не плутайте зі старішим multipart-сценарієм `/api/cloudphone/uploadFile` на цій самій поверхні.\n\nЗадокументовані бізнес-помилки: `33401`, `33419`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "url": {
                    "type": "string",
                    "description": "Upload url, which can be the link returned by the cloudphone/upload/file/signedURL interface or other publicly accessible file download address"
                  },
                  "uploadDest": {
                    "type": "string",
                    "description": "Storage directory"
                  },
                  "uploadType": {
                    "type": "integer",
                    "enum": [
                      1,
                      2
                    ],
                    "default": 1,
                    "description": "File type (1 = regular file, 2 = MP4 live-streaming file)"
                  }
                },
                "required": [
                  "url",
                  "id",
                  "uploadDest"
                ]
              },
              "example": {
                "url": "https://example-bucket.s3.amazonaws.com/prod/cloudPhoneOpenApi/1666625111121936/20260901/demo.mp4",
                "id": "1666625111121936",
                "uploadDest": "/Download",
                "uploadType": 2
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id`, `fileId` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "fileId": {
                          "type": "string",
                          "description": "Upload file id"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload status;0:uploading in progress, 1:upload successful, 2:upload failed"
                        }
                      },
                      "required": [
                        "id",
                        "fileId",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1666625111121936",
                    "fileId": "10069435",
                    "status": 0
                  },
                  "requestId": "e5d69c5e2d364106a0715dab1d9a03d3"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/upload/file/result": {
      "post": {
        "operationId": "getCloudPhoneUploadResultLocal",
        "summary": "Результат завантаження файлу",
        "deprecated": false,
        "description": "Опитує статус вивантаження файлу на хмарний телефон.\n- **Значення**: `0` вивантажується, `1` успішно, `2` помилка.\n- **Порожній результат**: якщо `fileId` не знайдено, виклик усе одно завершується успіхом, але `data` дорівнює null. Трактуйте це як «поки не видно або вже відсутнє», а не як збій.\n- **Вартість**: запит обходить список файлів Сервіса; опитуйте з помірним інтервалом.\n- **Примітка про поверхню API**: та сама реалізація, що й `/cloudphone/uploadFileResult` в Open API.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "fileId": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "fileId"
                ]
              },
              "example": {
                "id": "1666625111121936",
                "fileId": "10069434"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id`, `fileId` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "fileId": {
                          "type": "string",
                          "description": "Upload file id"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload file status;0:uploading in progress, 1:upload successful, 2:upload failed"
                        }
                      },
                      "required": [
                        "id",
                        "fileId",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1666625111121936",
                    "fileId": "10069435",
                    "status": 0
                  },
                  "requestId": "e5d69c5e2d364106a0715dab1d9a03d3"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/download": {
      "post": {
        "operationId": "downloadCloudPhoneFileLocal",
        "summary": "Завантаження файлу",
        "deprecated": false,
        "description": "Завантажує файл із хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: служба спершу обходить батьківський каталог і лише потім починає передачу, тому неіснуючий шлях призводить до помилки **тут**, а не під час опитування статусу. Ціль має бути звичайним файлом, а не каталогом.\n- **Завершення**: **прийнято, але не завершено.** Відповідь повертає `downId`; опитуйте `/cloudphone/download/result`, доки статус не стане успішним, помилковим або скасованим. Цей ендпоінт заново перевіряє, що телефон досі увімкнений і досі зайнятий вами.\n- **Повтор**: не ідемпотентно — кожен виклик заново обходить каталог і видає новий `downId`.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33507`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "filePath": {
                    "type": "string",
                    "description": "file path: /sdcard/Download/a.txt\n"
                  }
                },
                "required": [
                  "filePath",
                  "id"
                ]
              },
              "example": {
                "filePath": "/sdcard/Download/report.csv",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id` and `downId`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download id "
                        }
                      },
                      "required": [
                        "id",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": "",
                  "data": {
                    "id": "1661515884160372",
                    "downId": "1661515884160999"
                  },
                  "requestId": "7dcf166a597842139af5ce12d25fe0f8"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/download/result": {
      "post": {
        "operationId": "getCloudPhoneDownloadResultLocal",
        "summary": "Результат завантаження файлу",
        "deprecated": false,
        "description": "Опитує статус завантаження файлу з хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Передайте `downId`, повернений запитом на завантаження.\n- **Значення**: **шкала відрізняється від вивантаження**: `10` виконується, `20` успішно, `30` помилка, `40` скасовано. `downUrl` заповнюється лише після успішного завантаження.\n- **Примітка**: випадок «файл не існує» повідомляє сам запит на завантаження, який спершу обходить батьківський каталог, а не цей ендпоінт.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "downId": {
                    "type": "string",
                    "description": "File download ID"
                  }
                },
                "required": [
                  "downId",
                  "id"
                ]
              },
              "example": {
                "downId": "1661515884160999",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `status`, `downId` and `downUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "integer",
                          "description": "Download file status;10:Running, 20:Successful, 30:Failed, 40:Cancelled"
                        },
                        "downUrl": {
                          "type": "string",
                          "description": "File download URL; use it only when status is 20"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download task ID"
                        }
                      },
                      "required": [
                        "status",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "status": 20,
                    "downId": "1661515884160999",
                    "downUrl": "https://get.morelogin.com/..."
                  },
                  "requestId": "17d9dbfd958e4f40a51897520138d3ff"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/setKeyBox": {
      "post": {
        "operationId": "setCloudPhoneKeyBoxLocal",
        "summary": "Встановити скриньку з ключами",
        "deprecated": false,
        "description": "Установлює сертифікат keybox на хмарний телефон.\n- **Передумови**: `filePath` має вказувати на файл `.xml`, і хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: передає шлях до сертифіката Сервісу пристрою. MoreLogin нічого не зберігає, і служба не визначає кроку активації: чи потрібне пристрою перезавантаження, щоб сертифікат набрав чинності, визначається поведінкою Сервіса.\n- **Завершення**: синхронне прийняття Сервісом. Ендпоінта, який повідомляє про встановлений сертифікат, немає.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "filePath": {
                    "type": "string",
                    "description": "Шлях до файлу, наприклад, /sdcard/Download/xxx.xml"
                  },
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  }
                }
              },
              "example": {
                "filePath": "",
                "id": "0"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/install": {
      "post": {
        "operationId": "installCloudPhoneAppLocal",
        "summary": "Встановіть додаток на хмарний телефон",
        "deprecated": false,
        "description": "Установлює застосунок з бібліотеки команди на хмарний телефон.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Застосунок уже має існувати в бібліотеці команди або в публічному каталозі; укажіть його або через `appVersionId`, або через `packageName` разом із `versionCode`. Його також має бути завантажено до Сервіса, який обслуговує цей телефон, інакше встановлення не вдасться.\n- **Обмеження частоти**: не більше одного встановлення на телефон за секунду; швидший повторний виклик відхиляється.\n- **Завершення**: **прийнято, але не завершено.** Відповідь лише підтверджує, що запит поставлено в чергу. Опитуйте `/cloudphone/app/installedList`, щоб побачити, чи застосунок дійшов.\n- **Повтор**: безпечний після перевірки списку встановлених, з урахуванням обмеження одного виклику за секунду.\n\nЗадокументовані бізнес-помилки: `33005`, `33014`, `33714`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appVersionId": {
                    "description": "Ідентифікатор версії програми",
                    "type": "string"
                  },
                  "id": {
                    "description": "Ідентифікатор хмарного телефону",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "Назва пакета — обов’язкова, лише якщо не вказано appVersionId",
                    "type": "string"
                  },
                  "versionCode": {
                    "description": "Код версії — обов’язковий, лише якщо не вказано appVersionId",
                    "type": "integer"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "appVersionId": "1672940217990530",
                "id": "1673823102599682"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/page": {
      "post": {
        "operationId": "listCloudPhoneAppsLocal",
        "summary": "Отримати список програм APP",
        "deprecated": false,
        "description": "Виводить застосунки, які можна встановити на хмарний телефон.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Хмарний телефон не задіяний, тому він не мусить бути запущений.\n- **Вміст**: публічний каталог застосунків, тобто глобально доступні застосунки плюс опубліковані для вашої команди. Кожен запис містить свої версії в `appVersionList`, починаючи з найновіших; беріть `appVersionList[].id` як `appVersionId` для `/cloudphone/app/install`.\n- **Особливість пагінації**: результати перевпорядковуються після отримання сторінки, тому порядок стабільний лише в межах сторінки, а `total` відображає поточну сторінку, а не весь каталог. Для навігації використовуйте `pages`.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "Назва застосунку (часткова відповідність)",
                    "type": "string"
                  },
                  "pageNum": {
                    "description": "Номер сторінки; за замовчуванням: 1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "Елементів на сторінці; за замовчуванням: 10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "de",
                "pageNum": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить застосунки, доступні вашій команді на запитаній сторінці; версії кожного застосунку — у `appVersionList`, новіші спершу. `data.total` — кількість записів на поточній сторінці, а не загальна кількість; для нумерації сторінок використовуйте `data.pages`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "string",
                          "description": "Кількість записів на поточній сторінці"
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Ідентифікатор застосунку. Це не те значення, яке очікує `/cloudphone/app/install`."
                              },
                              "appName": {
                                "type": "string",
                                "description": "Назва застосунку"
                              },
                              "appIcon": {
                                "type": "string",
                                "description": "URL піктограми застосунку"
                              },
                              "packageName": {
                                "type": "string",
                                "description": "Ім'я пакета Android"
                              },
                              "categoryValue": {
                                "type": "integer",
                                "description": "Ідентифікатор категорії"
                              },
                              "sortNo": {
                                "type": "integer",
                                "description": "Порядок сортування в бібліотеці застосунків"
                              },
                              "appVersionList": {
                                "type": "array",
                                "description": "Версії застосунку, відсортовані за `versionCode` за спаданням (новіші спершу)",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "description": "Ідентифікатор версії застосунку. Передайте його як `appVersionId` до `/cloudphone/app/install`."
                                    },
                                    "versionCode": {
                                      "type": "string",
                                      "description": "Код версії"
                                    },
                                    "versionName": {
                                      "type": "string",
                                      "description": "Відображувана назва версії"
                                    },
                                    "installStatus": {
                                      "type": [
                                        "integer",
                                        "null"
                                      ],
                                      "description": "Для цієї операції завжди null. Стан встановлення запитуйте через `/cloudphone/app/installedList`."
                                    },
                                    "packageName": {
                                      "type": [
                                        "string",
                                        "null"
                                      ],
                                      "description": "Для цієї операції завжди null; використовуйте `packageName` рівня застосунку."
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "1",
                    "current": "1",
                    "pages": "1",
                    "dataList": [
                      {
                        "id": "1672940217990529",
                        "appName": "Depop",
                        "appIcon": "https://cdn.morelogin.com/app/depop.png",
                        "packageName": "com.depop",
                        "categoryValue": 1,
                        "sortNo": 0,
                        "appVersionList": [
                          {
                            "id": "1672940217990530",
                            "versionCode": "450000000",
                            "versionName": "4.50.0",
                            "installStatus": null,
                            "packageName": null
                          }
                        ]
                      }
                    ]
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/team/app/page": {
      "post": {
        "operationId": "listTeamCloudPhoneAppsLocal",
        "summary": "Список додатків команди",
        "deprecated": false,
        "description": "Виводить власну бібліотеку застосунків вашої команди, включно з передвстановленими застосунками.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Вміст**: джерело відрізняється від `/cloudphone/app/page`: тут застосунки, завантажені вашою командою, які повертаються плоским списком (по рядку на версію застосунку), а не вкладеними за версіями. Записи містять статус перевірки; доки триває оновлення, поля статусу описують **версію, яка оновлюється**, а не чинну.\n- **Примітка**: фільтрація за нерозпізнаним Сервісом дає порожню сторінку, а не помилку.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "Назва застосунку (часткова відповідність)",
                    "type": "string"
                  },
                  "pageNo": {
                    "description": "Поточна сторінка; типово 1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "Елементів на сторінці; типово 10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "TikTok",
                "pageNo": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataPageResultCloudPhoneAppDto"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "15",
                    "current": "1",
                    "pages": "2",
                    "dataList": [
                      {
                        "id": "123456",
                        "appName": "Facebook",
                        "packageName": "com.facebook.katana",
                        "versionName": "450.0.0.1",
                        "versionCode": "450000000",
                        "enabled": true,
                        "desc": "Social media application",
                        "enableRoot": false
                      }
                    ]
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/api/cloudphone/app/installedList": {
      "post": {
        "operationId": "listInstalledCloudPhoneAppsLocal",
        "summary": "Запит списку встановлених програм",
        "deprecated": false,
        "description": "Виводить застосунки, встановлені на хмарному телефоні на цей момент.\n- **Передумови**: телефон має належати вашій команді. На відміну від більшості команд хмарного телефона, займати його **не** потрібно, але Сервіса опитують у реальному часі, тому вимкнений телефон зазвичай призводить до помилки на боці Сервіса, а не до помилки MoreLogin.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: це сигнал завершення для `/cloudphone/app/install` і `/cloudphone/app/uninstall`. Назви та піктограми застосунків підставляються з каталогу; пакети, відсутні в каталозі, повертаються як є.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Ідентифікатор хмарного телефону",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1674550360293464"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — масив об'єктів із полями `appName`, `appIcon`, `packageName`, `versionCode` і `versionName`; порожній масив, якщо повертати нічого.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "appName": {
                            "type": "string"
                          },
                          "appIcon": {
                            "type": "string"
                          },
                          "packageName": {
                            "type": "string"
                          },
                          "versionCode": {
                            "type": "string"
                          },
                          "versionName": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "appName": "example-name",
                      "appIcon": "string",
                      "packageName": "example-name",
                      "versionCode": "string",
                      "versionName": "example-name"
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/start": {
      "post": {
        "operationId": "startCloudPhoneAppLocal",
        "summary": "Запустити програму",
        "deprecated": false,
        "description": "Запускає встановлений застосунок на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Завершення**: відповідь підтверджує, що команда дійшла до Сервіса, а не що застосунок опинився на передньому плані. Ендпоінта, який повідомляє про запущений застосунок, немає: перевіряйте знімком екрана або shell-командою.\n- **Повтор**: дедуплікації немає; повторний виклик надсилає команду знову.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Ідентифікатор хмарного телефону",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "Назва пакета програм",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "packageName"
                ]
              },
              "example": {
                "id": "1674550360293464",
                "packageName": "com.depop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/restart": {
      "post": {
        "operationId": "restartCloudPhoneAppLocal",
        "summary": "Перезапустіть ПРОГРАМУ",
        "deprecated": false,
        "description": "Перезапускає застосунок на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. **Наявність застосунку не перевіряється**: відсутній пакет просто ні до чого не призведе.\n- **Завершення**: відповідь підтверджує, що команду надіслано Сервісу, а не що застосунок перезапустився. Перевірте через `/cloudphone/app/installedList` або спостерігаючи за пристроєм.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "Назва пакета програм"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку, якщо код > 0, повертається повідомлення про помилку"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  },
                  "required": [
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/stop": {
      "post": {
        "operationId": "stopCloudPhoneAppLocal",
        "summary": "Зупинити ПРОГРАМУ",
        "deprecated": false,
        "description": "Зупиняє запущений застосунок на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Чи встановлений застосунок і чи запущений він — не перевіряється.\n- **Завершення**: відповідь підтверджує, що команду надіслано Сервісу, а не що застосунок зупинився.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "Назва пакета програм"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється, якщо код > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/uninstall": {
      "post": {
        "operationId": "uninstallCloudPhoneAppLocal",
        "summary": "Видалити ПРОГРАМУ",
        "deprecated": false,
        "description": "Видаляє застосунок із хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: надсилає видалення й оновлює запис про встановлення для цього телефона.\n- **Завершення**: відповідь підтверджує, що запит прийнято. Перевірте через `/cloudphone/app/installedList`.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "Назва пакета програм"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється, якщо код > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/openRoot": {
      "post": {
        "tags": [
          "Apps"
        ],
        "summary": "Увімкнення ROOT для додатка",
        "description": "Надає ROOT конкретним пакетам застосунків на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується на сумісних пристроях; в інших Сервісів виклик проходить успішно, але не дає ефекту.\n- **Ефект**: надсилає на пристрій список дозволених пакетів і, як побічний ефект, вмикає перемикач ROOT. **MoreLogin нічого не зберігає**, тому надані права неможливо прочитати через API.\n- **Завершення**: синхронне прийняття Сервісом. Коли ROOT фактично набере чинності на пристрої, визначається поведінкою Сервіса; MoreLogin не перезавантажує телефон.\n- **Примітка**: зараз немає ендпоінта для відкликання ROOT в окремих пакетів. Щоб вимкнути глобальний перемикач, використовуйте `/cloudphone/enableRoot`.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "appOpenRoot",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiAppRootOperateDto"
              },
              "example": {
                "id": "12345678",
                "packageNames": [
                  "com.test"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/api/cloudphone/app/setHideAccessibilityApp": {
      "post": {
        "operationId": "setCloudPhoneAccessibilityAppHiddenLocal",
        "summary": "Приховати додаток для спеціальних можливостей",
        "deprecated": false,
        "description": "Приховує застосунки зі списку служби доступності Android на одному або кількох хмарних телефонах.\n- **Передумови**: від 1 до 100 ідентифікаторів телефонів і від 1 до 100 назв пакетів. Телефони мають належати вашій команді, але їм **не** потрібно бути увімкненими чи зайнятими вами. Якщо жоден з ідентифікаторів не розв'язується, виклик повертає бізнес-помилку, а не системну.\n- **Ефект**: список надсилається Сервісу й **не зберігається в MoreLogin**, тому прочитати його назад неможливо. Підтримується на сумісних моделях; в інших Сервісів виклик проходить успішно, але без ефекту.\n- **Завершення**: синхронне. На деяких моделях кожен пакет надсилається окремим викликом до Сервіса, тому довгий список обробляється пропорційно довше, а збій посередині залишає застосованими попередні пакети.\n- **Примітка**: MoreLogin не перевіряє версію Android; описане обмеження за моделями походить від можливостей Сервіса, а назви пакетів передаються дослівно.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Ідентифікатори хмарних телефонів"
                  },
                  "packageName": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Назва пакета програм. Порожній рядок еквівалентний очищенню, тоді як * або ALL приховує всі програми."
                  }
                }
              },
              "example": {
                "ids": [
                  "0"
                ],
                "packageName": [
                  "*"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється, якщо код > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/page": {
      "post": {
        "summary": "Отримання списку профілів хмарних телефонів",
        "description": "Посторінково виводить хмарні телефони, видимі автентифікованій команді.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Примітка**: повертаються телефони всіх Сервісів. Паролі платформних і динамічних проксі видаляються з відповіді.\n- **Застосування**: цей ендпоінт і `/cloudphone/info` служать сигналами завершення асинхронних операцій увімкнення та вимкнення, зміни пристрою в один клік і підготовки телефона.",
        "operationId": "pageUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bindIp": {
                    "type": "boolean",
                    "description": "Чи прив'язана IP-адреса: true = прив'язана, false = ні",
                    "example": false
                  },
                  "keyword": {
                    "type": "string",
                    "description": "Ключове слово для фільтрації: інформація про проксі-сервер, назва групи, назва тегу, назва середовища",
                    "example": "CP-424"
                  },
                  "pageNo": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Поточна сторінка",
                    "example": 1
                  },
                  "pageSize": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Елементів на сторінці",
                    "example": 100
                  },
                  "sort": {
                    "type": "array",
                    "description": "Динамічні поля сортування. Наразі для хмарних телефонів підтримується лише \"envName\".",
                    "items": {
                      "type": "object",
                      "properties": {
                        "sortDirection": {
                          "type": "string",
                          "enum": [
                            "asc",
                            "desc"
                          ],
                          "description": "Напрямок сортування",
                          "example": "asc"
                        },
                        "sortField": {
                          "type": "string",
                          "description": "Поле для сортування (наразі підтримується лише \"envName\")",
                          "example": "envName"
                        }
                      },
                      "required": [
                        "sortDirection",
                        "sortField"
                      ]
                    },
                    "example": [
                      {
                        "sortDirection": "asc",
                        "sortField": "envName"
                      }
                    ]
                  }
                },
                "example": {
                  "bindIp": false,
                  "keyword": "CP-424",
                  "pageNo": 1,
                  "pageSize": 100,
                  "sort": [
                    {
                      "sortDirection": "asc",
                      "sortField": "envName"
                    }
                  ]
                }
              },
              "example": {
                "bindIp": false,
                "keyword": "CP-424",
                "pageNo": 1,
                "pageSize": 100,
                "sort": [
                  {
                    "sortDirection": "asc",
                    "sortField": "envName"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "повідомлення про помилку"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "current": {
                          "type": "string"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/CloudPhoneProfile"
                          }
                        },
                        "pages": {
                          "type": "string"
                        },
                        "total": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "current": "1",
                    "dataList": [
                      {
                        "abnormalStatus": 1,
                        "adbInfo": {
                          "adbIp": "string",
                          "adbPassword": "string",
                          "adbPort": "9222",
                          "command": "string",
                          "expireTime": "2026-09-01 12:00:00",
                          "remark": "example remark",
                          "success": 1
                        },
                        "billingType": 1,
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": 1,
                        "createMemberName": "example-name",
                        "enableAdb": true,
                        "envName": "example-name",
                        "envRemark": "example remark",
                        "envStatus": 1,
                        "expireTime": "2026-09-01 12:00:00",
                        "groupId": "1673823102599682",
                        "groupName": "example-name",
                        "id": "1673823102599682",
                        "androidId": "1673823102599682",
                        "gaid": "1673823102599682",
                        "lastConnectDate": "2026-09-01 12:00:00",
                        "lastConnectMemberId": "1673823102599682",
                        "lastConnectMemberName": "example-name",
                        "lastStartDate": "2026-09-01 12:00:00",
                        "lastStartMemberId": "1673823102599682",
                        "lastStartMemberName": "example-name",
                        "proxy": {
                          "country": "string",
                          "countryCode": "string",
                          "createDate": "2026-09-01 12:00:00",
                          "delFlag": 1,
                          "expiryTime": "2026-09-01 12:00:00",
                          "exportIp": "9222",
                          "groupId": "1673823102599682",
                          "id": "1673823102599682",
                          "providerCode": "string",
                          "proxyAreaCode": "string",
                          "proxyCatagoryType": 1,
                          "proxyCheckStatus": 1,
                          "proxyInfo": "string",
                          "proxyIp": "string",
                          "proxyName": "example-name",
                          "proxyPort": 1,
                          "proxyRegionCode": "string",
                          "proxyStatus": 1,
                          "proxySub": {
                            "activeRecordId": "1673823102599682",
                            "businessId": "1673823102599682",
                            "createMember": 1,
                            "endTime": "2026-09-01 12:00:00",
                            "id": "1673823102599682",
                            "nextBillingTime": "2026-09-01 12:00:00",
                            "startTime": "2026-09-01 12:00:00",
                            "subPayMethod": "string",
                            "subStatus": 1,
                            "subType": 1,
                            "teamId": "1673823102599682"
                          },
                          "proxyType": 1,
                          "proxyTypeCode": "string",
                          "regionKey": "string",
                          "releaseTime": "2026-09-01 12:00:00",
                          "uniqueId": 1
                        },
                        "proxyStatus": 1,
                        "supportAdb": true,
                        "tagInfos": [
                          {
                            "id": "1673823102599682",
                            "tagName": "example-name"
                          }
                        ],
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": 1
                      }
                    ],
                    "pages": "1",
                    "total": "1"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/create": {
      "post": {
        "summary": "Створення профілю хмарного телефону",
        "description": "Купує та готує один або кілька хмарних телефонів.\n- **Передумови**: у тарифі має залишитися ємність, а добова квота створення не має бути витрачена. `country`, `timezone` і `language` перевіряються за списком, який підтримує вибраний Сервіс, тому непідтримувана комбінація відхиляється, а не підганяється непомітно. Координати обмежені ±180 за довготою та ±90 за широтою. Номер телефона відкидається, якщо вибраний SKU його не підтримує. Місячні SKU можна створювати через API, якщо їх повертає [`/api/cloudphone/monthly/skus`](./local-api.yaml#operation/listMonthlyCloudPhoneSkus); поточний період — 30 днів.\n- **Ефект**: створює записи хмарних телефонів. SKU з похвилинною оплатою стають доступними після підготовки; місячні створюються неактивними. Створення не списує кошти: місячні телефони оплачуються лише через [`/api/cloudphone/monthly/activate`](./local-api.yaml#operation/activateMonthlyCloudPhones), а похвилинні починають витрачати баланс або квоту після ввімкнення.\n- **Завершення**: **прийнято, але не завершено.** Інстанс Сервіса ще не готовий, а надто раннє увімкнення відхиляється. Опитуйте [`/api/cloudphone/info`](./local-api.yaml#operation/infoUsingPOST) або [`/api/cloudphone/page`](./local-api.yaml#operation/pageUsingPOST), доки `envStatus` не повідомить, що телефон вимкнений. Для місячного SKU перед увімкненням також виконайте [`/api/cloudphone/monthly/activate`](./local-api.yaml#operation/activateMonthlyCloudPhones).\n- **Повтор**: не ідемпотентний і не серіалізується. Ключа ідемпотентності немає. Не повторюйте наосліп після таймауту: спершу запитайте стан.\n\nЗадокументовані бізнес-помилки: `19064`, `20018`, `33338`, `33339`, `33340`, `33341`, `33342`, `33343`, `33344`, `33345`, `33398`, `33399`, `33400`, `33408`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "createUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "Модель хмарного телефона\nskuId:10002 model:Android 12\nskuId:10013 model:Android 13\nskuId:10005 model:Android 14\nskuId:10004 model:Android 15\nskuId:10014 model:Android 15A\nskuId:10015 model:Android 16\nПідтримувані регіони та відповідність часових поясів див. у [таблиці країн і часових поясів](/api-reference/appendix/country-time-zone)\n"
                  },
                  "quantity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10,
                    "description": "Кількість хмарних телефонів, що створюються. Діапазон значень: [1-10]"
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "Примітка до профілю (не більше 1500 символів)"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "ID групи. Для «без групи» вкажіть `\"0\"`."
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Назва наявної групи або назва нової групи, яку буде створено, якщо збігів немає."
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "Чи підбирати географічне розташування автоматично. За замовчуванням: true"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "Чи підбирати мову автоматично. За замовчуванням: true"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "Чи підбирати розташування (часовий пояс, країну) автоматично. За замовчуванням: true"
                  },
                  "country": {
                    "type": "string",
                    "description": "Код країни (наприклад `us`). Повний список див. у [таблиці країн і часових поясів](/api-reference/appendix/country-time-zone)"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Часовий пояс, наприклад America/New_York"
                  },
                  "language": {
                    "type": "string",
                    "description": "Мова, наприклад en-US"
                  },
                  "altitude": {
                    "type": "number",
                    "description": "Висота над рівнем моря"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Широта. Приклад: 22.309182"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Довгота. Приклад: 114.176817"
                  },
                  "speed": {
                    "type": "number",
                    "maximum": 400,
                    "description": "Швидкість руху"
                  },
                  "bearing": {
                    "type": "number",
                    "maximum": 360,
                    "description": "Напрямок руху"
                  },
                  "accuracy": {
                    "type": "number",
                    "maximum": 100,
                    "description": "Горизонтальна точність"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "Власний номер телефона. Вимоги до формату: має починатися зі знака +, код країни — від 1 до 3 цифр (крім 86), загальна довжина — від 8 до 14 цифр, допустимі лише + та цифри."
                  },
                  "brand": {
                    "type": "string",
                    "description": "Бренд пристрою. Його можна запитати через інтерфейс https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post."
                  },
                  "modelId": {
                    "type": "number",
                    "description": "ID моделі пристрою. Його можна запитати через інтерфейс https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post."
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "ID проксі"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Назви міток. Порожні значення ігноруються."
                  }
                },
                "required": [
                  "skuId",
                  "quantity"
                ]
              },
              "example": {
                "skuId": "1661515884160372",
                "quantity": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Це хмарна система ідентифікації телефону"
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "error": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    "string"
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "error": {}
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/powerOn": {
      "post": {
        "summary": "Стартап-хмарний телефон",
        "description": "Вмикає хмарний телефон.\n- **Передумови**: телефон має бути вимкнений. Виклик відхиляється, коли SKU знято з продажу або він на обслуговуванні, коли телефон зайнятий іншим учасником, доки перевіряється його проксі, коли на рахунку заборгованість або телефон деактивований, коли сплив місячний період, а також коли недоступні ні безплатні хвилини, ні паралельний слот, ні позитивний баланс. Деякі моделі додатково потребують найновішої версії клієнта для Windows.\n- **Ефект**: позначає телефон як такий, що завантажується, займає його для учасника, який викликає, і резервує паралельний слот або починає витрачати час. Відповідь повідомляє, що саме було використано.\n- **Завершення**: **прийнято, але не завершено.** Опитуйте `/cloudphone/info`, доки `envStatus` не стане «увімкнений»; помилка проявиться там як `errorCode` і `errorMsg`. Учасники з налаштованим хостом зворотного виклику також отримують webhook.\n- **Повтор**: другий одночасний виклик відхиляється відразу, а не ставиться в чергу. Після таймауту прочитайте `/cloudphone/info`, а не надсилайте запит повторно.\n\nЗадокументовані бізнес-помилки: `33300`, `33309`, `33315`, `33316`, `33317`, `33318`, `33321`, `33322`, `33323`, `33324`, `33325`, `33346`, `33347`, `33367`, `33376`, `33407`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "powerOnUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "headless": {
                    "type": "boolean",
                    "description": "Відображати вікно хмарного телефону. false: Відображати, true: Не відображати, За замовчуванням: true"
                  },
                  "disableMoneySavingMode": {
                    "type": "boolean",
                    "description": "Вимкнути режим енергозбереження, за замовчуванням: false"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1637226321190925"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/powerOff": {
      "post": {
        "summary": "Вимкніть хмарний телефон",
        "description": "Вимикає хмарний телефон.\n- **Передумови**: телефон має завантажуватися або бути увімкненим. Його неможливо вимкнути, доки він зайнятий іншим учасником, а також доки виконується зміна пристрою в один клік, перезавантаження або скидання.\n- **Ефект**: припиняє нарахування плати, звільняє паралельний слот, закриває облік споживання й анулює видані для сесії дані підключення. Вимкнення телефона, який ще завантажувався, перериває запуск, а не вимикає його.\n- **Завершення**: плата й локальний стан закриваються синхронно; вимкнення на боці Сервіса продовжується після відповіді, тому підтвердьте через `/cloudphone/info`.\n- **Повтор**: другий виклик повідомить, що телефон не запущений. Пакети перериваються на першій помилці, тому перед повтором перечитайте стан.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33308`, `33331`, `33332`, `33333`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "powerOffUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1596527092376632"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/edit/batch": {
      "post": {
        "summary": "Змінення профілю хмарного телефону",
        "description": "Оновлює конфігурацію одного або кількох хмарних телефонів.\n- **Передумови**: телефони мають належати команді. Регіон, мова та координати перевіряються за Сервісом точно так само, як під час створення. Переміщення телефона до групи, на яку у вас немає прав, відхиляється.\n- **Ефект**: перезаписує налаштування телефона й оновлює конфігурацію GPS; може створювати прив'язки міток. Плата не стягується, паралельність не змінюється.\n- **Завершення**: синхронне й ідемпотентне за однакового тіла запиту.",
        "operationId": "editBatchUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "ID хмарних телефонів"
                  },
                  "envName": {
                    "type": "string",
                    "maxLength": 64,
                    "minLength": 1,
                    "description": "Назва хмарного телефона (не більше 64 символів)"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "Власний номер телефона. Вимоги до формату: має починатися зі знака +, код країни — від 1 до 3 цифр (крім 86), загальна довжина — від 8 до 14 цифр, допустимі лише + та цифри."
                  },
                  "powerOnBillingStrategy": {
                    "type": "integer",
                    "enum": [
                      0,
                      1
                    ],
                    "description": "Спосіб тарифікації для хмарних телефонів без місячної підписки (0: за замовчуванням, 1: лише паралельний пакет)"
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "ID проксі"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "ID групи середовищ"
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Назва наявної групи або назва нової групи, яку буде створено, якщо збігів немає."
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Назви міток на заміну. Порожні значення ігноруються."
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "Примітка до середовища (не більше 1500 символів, переноси рядків підтримуються)"
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "Автопідбір геопозиції"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "Автопідбір мови"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "Автопідбір розташування (часовий пояс і країна)"
                  },
                  "country": {
                    "type": "string",
                    "description": "Країна"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Часовий пояс"
                  },
                  "language": {
                    "type": "string",
                    "description": "Мова"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Широта"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Довгота"
                  },
                  "enableRoot": {
                    "type": "boolean",
                    "description": "Увімкнути глобальний ROOT"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": [
                  "1637238770951311"
                ],
                "proxyId": "0",
                "automaticGeo": false,
                "automaticLanguage": false,
                "automaticLocation": false,
                "country": "bo",
                "timezone": "America/La_Paz",
                "language": "de-CH",
                "latitude": 0,
                "longitude": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення: 0, Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/setProxy": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Налаштування проксі хмарного телефону",
        "description": "Прив'язує проксі до одного або кількох хмарних телефонів.\n- **Передумови**: укажіть хоча б одне з `ids` або `uniqueIds`. Телефони мають належати вашій команді; увімкненими їм бути **не** обов'язково. Якщо ви вказуєте `proxyId`, він має існувати, інакше виклик відхиляється.\n- **Ефект**: якщо `proxyId` не вказано або він дорівнює `0`, повторно використовується наявний проксі з цілком однаковими даними підключення, а **якщо збігів немає, у вашій команді створюється новий запис проксі**. Стан перевірки проксі скидається, а попередній проксі запам'ятовується.\n- **Завершення**: синхронне. **Увімкнені телефони отримують новий проксі негайно — перезапуск не потрібен**; вимкнені підхоплять його під час наступного запуску.\n- **Повтор**: повторна прив'язка наявного `proxyId` ідемпотентна, але повторення виклику із «сирими» даними підключення може щоразу створювати ще один запис проксі, коли дедуплікація не спрацьовує.\n\nЗадокументовані бізнес-помилки: `33300`, `33303`, `33320`, `14023`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "setProxy",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneSetProxyApiDto"
              },
              "example": {
                "ids": [
                  "1558968155668507"
                ],
                "uniqueIds": [
                  1001
                ],
                "proxy": {
                  "proxyIp": "192.168.1.100",
                  "proxyPort": 8080,
                  "proxyProvider": 2
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/delete/batch": {
      "post": {
        "summary": "Видалити профіль хмарного телефону",
        "description": "Звільняє один або кілька хмарних телефонів.\n- **Передумови**: телефони не повинні перебувати в процесі передавання, а команда не повинна мати неоплачених замовлень за ними. Телефон не мусить бути вимкнений.\n- **Ефект**: інстанс Сервіса звільняється одразу. Телефон, який ніколи не активувався, видаляється повністю; активований зберігається як деактивований запис, тому й далі з'являється у списках зі статусом «деактивований».\n- **Завершення**: синхронне.\n- **Повтор**: телефони обробляються по одному, і виклик переривається на першій помилці, тому пакет може бути застосований частково. Перечитайте `/cloudphone/page` перед повтором і повторюйте лише для телефонів, які досі активні.",
        "operationId": "deleteUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "ids"
                ]
              },
              "example": {
                "ids": [
                  "1595755686723985"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/newMachine": {
      "post": {
        "summary": "Новий хмарний телефон одним клацанням миші",
        "description": "Замінює ідентичність пристрою хмарного телефона на місці (новий пристрій в один клік).\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Якщо ви вказуєте бренд і модель, вони мають підтримуватися SKU цього телефона. **Операція витрачає добову квоту створення хмарних телефонів** — ту саму, яку використовує `/cloudphone/create`.\n- **Ефект**: надсилає на пристрій новий бренд і модель, очищає записи про встановлені застосунки для цього телефона, скидає його номер і перериває будь-яке виконуване завдання ШІ. Точний набір ідентифікаторів, які перегенерує Сервіс, MoreLogin не визначає.\n- **Завершення**: **прийнято, але не завершено.** Телефон переходить у стан «новий пристрій в один клік»; опитуйте `/cloudphone/info`, доки він не покине цей стан.\n- **Паралельність**: доки операція виконується, увімкнення, вимкнення та всі команди, що потребують запущеного телефона, відхиляються. Другий одночасний виклик відхиляється, а не ставиться в чергу.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33326`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "oneNewUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "brand": {
                    "type": "string",
                    "description": "Бренд"
                  },
                  "modelId": {
                    "type": "integer",
                    "description": "Ідентифікатор моделі"
                  }
                }
              },
              "example": {
                "id": "1595372958075305"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 вказує на успіх, >0 вказує на невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  },
                  "required": [
                    "code",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/info": {
      "post": {
        "summary": "Деталі хмарного телефону",
        "description": "Повертає повні відомості про один хмарний телефон, включно з назвами групи та міток.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: основний ендпоінт статусу для асинхронних операцій. `envStatus` розрізняє стани «новий», «помилка створення», «вимкнений», «завантажується», «увімкнений», «скидається», «перезавантажується» та «зміна пристрою в один клік виконується»; `errorCode` і `errorMsg` містять причину, коли асинхронна операція завершилася невдало.",
        "operationId": "infoUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1672532391231745"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/queryByAndroidId": {
      "post": {
        "summary": "Отримання відомостей про хмарний телефон за AndroidId",
        "description": "Знаходить хмарний телефон за Android ID, який повідомляє пристрій.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Телефон не мусить бути увімкнений.\n- **Повертає**: ту саму структуру відомостей, що й `/cloudphone/info`.\n- **Крайні випадки**: порожній `androidId` повертає успіх із `data`, що дорівнює null, а не помилку валідації; а якщо один Android ID спільний для кількох телефонів, довільно повертається один із них.",
        "operationId": "queryByAndroidId",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "androidId": {
                    "type": "string",
                    "description": "androidId хмарного телефона",
                    "example": "8f7e6d5c4b3a2f1e"
                  }
                },
                "required": [
                  "androidId"
                ]
              },
              "example": {
                "androidId": "8f7e6d5c4b3a2f1e"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/enableRoot": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Увімкнення або вимкнення глобального ROOT",
        "description": "Вмикає або вимикає глобальний перемикач ROOT для хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується на сумісних пристроях; в інших Сервісів виклик проходить успішно, але не дає ефекту.\n- **Ефект**: на відміну від `/cloudphone/app/openRoot`, налаштування **зберігається** в записі налаштувань телефона й потім надсилається Сервісу як перемикач для всього пристрою.\n- **Завершення**: синхронне. MoreLogin не перезавантажує телефон; коли зміна набере чинності на пристрої, визначається поведінкою Сервіса.\n- **Повтор**: ідемпотентний.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "enableRoot",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneEnableRootApiDTO"
              },
              "example": {
                "id": "1558968155668507",
                "enableRoot": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/screenCap": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Знімок екрана хмарного телефону",
        "description": "Робить знімок екрана хмарного телефона й повертає URL для завантаження.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних пристроях; решта Сервісів відхиляють виклик.\n- **Ефект**: На деяких моделях файл знімка видаляється з пристрою після того, як його зроблено.\n- **Завершення**: синхронне. Відповідь містить тимчасовий URL для завантаження зображення.\n- **Особливість**: На деяких моделях повідомлений термін спливання — фіксована година від моменту відповіді, а `success` завжди дорівнює true; це не справжній термін життя підпису. Завантажуйте зображення відразу, а не зберігайте URL.\n- **Повтор**: побічних ефектів, крім самого знімка, немає, тому повторювати безпечно.",
        "operationId": "screenCap",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефона",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `url`, `status`, `expireAt` і `success`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string",
                          "description": "URL доступу до знімка екрана",
                          "example": "http://oss.morelogin.com/test.png"
                        },
                        "status": {
                          "type": "string",
                          "description": "Статус, що позначає негайне завершення (\"finish\") або очікування (\"pending\")",
                          "example": "finish"
                        },
                        "expireAt": {
                          "type": "string",
                          "description": "Позначка часу завершення дії URL у мілісекундах (лише для деяких моделей)",
                          "example": "1756024767163"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "Успішно згенеровано",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "url": "http://oss.morelogin.com/test.png",
                    "status": "finish",
                    "expireAt": "1756024767163",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/screenCapBase64": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Знімок екрану хмарного телефону (відповідь base64)",
        "description": "Робить знімок екрана хмарного телефона й повертає зображення прямо у відповіді в base64.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. **Підтримується лише на сумісних пристроях** — усі інші Сервіси відхиляють виклик.\n- **Завершення**: синхронне. У разі помилки відповідь містить повідомлення про помилку замість даних зображення, тому перевіряйте `success` перед декодуванням.\n- **Підтримка моделей**: за документацією доступно лише на образах Android 12 та Android 15.\n- **Застосування**: віддавайте перевагу цьому ендпоінту замість `/cloudphone/screenCap`, коли не хочете залежати від URL, розміщеного Сервісом.",
        "operationId": "screenCapBase64",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID хмарного телефону",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `captureBase64`, `errorMessage` і `success`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "captureBase64": {
                          "type": "string",
                          "description": "Зображення у кодуванні Base64",
                          "example": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA....."
                        },
                        "errorMessage": {
                          "type": "string",
                          "description": "Повідомлення про помилку",
                          "example": "success"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "Успішно згенеровано",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється при коді > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "captureBase64": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA.....",
                    "errorMessage": "success",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/brand/models": {
      "post": {
        "operationId": "listCloudPhoneBrandsAndModelsLocal",
        "summary": "Запит щодо списку марок та моделей",
        "description": "Виводить бренди та моделі пристроїв, які підтримує SKU хмарного телефона.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Хмарний телефон не задіяний.\n- **Застосування**: виберіть допустимі `brand` і `modelId` перед викликом `/cloudphone/create` або `/cloudphone/newMachine`; обидва відхиляють комбінацію, яку цей ендпоінт не повертає.\n- **Примітка**: невідомий `skuId` дає порожній список, а не помилку.",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "Ідентифікатор продукту Cloud Phone"
                  }
                },
                "required": [
                  "skuId"
                ]
              },
              "example": {
                "skuId": "10002"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "timestamp": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "brand": {
                            "type": "string"
                          },
                          "model": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "timestamp": 1,
                  "data": [
                    {
                      "brand": "string",
                      "model": "string"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/updateAdb": {
      "post": {
        "summary": "Оновити стан ADB хмарного телефону",
        "description": "Вмикає або вимикає доступ через ADB на одному чи кількох хмарних телефонах.\n- **Передумови**: враховуються лише телефони, чий SKU підтримує ADB; якщо жоден з переданих не підходить, виклик відхиляється. Телефони, яким ніколи не виділявся інстанс, пропускаються.\n- **Ефект**: встановлює перемикач ADB у Сервіса й зберігає його для телефонів, які Сервіс прийняв.\n- **Часткова невдача**: якщо частину телефонів оброблено успішно, а частину — ні, **виклик усе одно повідомляє про помилку**. Трактуйте помилку як «частину телефонів могло бути змінено» й перечитайте стан.\n- **Завершення**: синхронне. Дані підключення читайте через `/cloudphone/batchAdbInfo`, який повертає дані лише для увімкнених телефонів із підтримкою ADB.\n\nЗадокументовані бізнес-помилки: `33350`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "updateAdbUsingPOST",
        "tags": [
          "ADB"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enableAdb": {
                    "type": "boolean"
                  },
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enableAdb",
                  "ids"
                ]
              },
              "example": {
                "enableAdb": true,
                "ids": [
                  "1633612946805630"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/batchAdbInfo": {
      "post": {
        "tags": [
          "ADB"
        ],
        "summary": "Пакетний запит інформації ADB",
        "description": "Отримує дані підключення ADB для не більш ніж 200 хмарних телефонів.\n- **Передумови**: телефони мають належати вашій команді. Займати їх **не** потрібно. Дані отримуються лише для увімкнених телефонів, чий SKU підтримує ADB.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Часткові результати**: результати відповідають запитаним ідентифікаторам і **ніколи не падають цілком**. Коли дані недоступні, причину вказано в `remark`: телефон не існує, не увімкнений, не підтримує ADB або запит до Сервіса не вдався. Прочитайте `remark`, перш ніж вважати порожній запис помилкою.\n- **Різні Сервіси**: один запит може охоплювати телефони різних Сервісів; служба групує їх усередині себе й об'єднує результати.\n- **Примітка**: спершу увімкніть ADB через `/cloudphone/updateAdb`.",
        "operationId": "batchAdbInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiBatchAdbInfoDto"
              },
              "example": {
                "envIds": [
                  "1674380838117474",
                  "1675787900043353"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataListApiBatchAdbInfoResultDto"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": [
                    {
                      "id": "1674380838117474",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "192.168.1.100",
                      "adbPassword": "abc12345",
                      "adbPort": "5555",
                      "command": null,
                      "expireTime": null,
                      "remark": null
                    },
                    {
                      "id": "1675787900043353",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "10.0.0.50",
                      "adbPassword": "xyz78900",
                      "adbPort": "22",
                      "command": "ssh -L 5555:localhost:5555 user@10.0.0.50 -p 22",
                      "expireTime": "2026-05-23 12:00:00",
                      "remark": null
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/exeCommand": {
      "post": {
        "summary": "Виконати команду оболонки",
        "description": "Виконує shell-команду на хмарному телефоні й повертає її вивід.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: цілком визначається командою. MoreLogin нічого не зберігає й **не застосовує ані білого списку команд, ані обмеження довжини**; привілеї, з якими виконується команда, задає Сервіс пристрою. Якщо команді потрібен root, увімкніть глобальний root окремо.\n- **Завершення**: синхронне — `data` містить вивід команди, а не ідентифікатор завдання.\n- **Повтор**: журналу виконання, до якого можна звернутися, немає, тому після таймауту результат залишається невідомим. Повторюйте лише ті команди, які безпечно виконувати двічі.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "executeShellCommand",
        "tags": [
          "ADB"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID хмарного телефона"
                  },
                  "command": {
                    "type": "string",
                    "description": "Shell-команда для виконання"
                  }
                },
                "required": [
                  "id",
                  "command"
                ]
              },
              "example": {
                "command": "am start -n com.android.chrome/com.google.android.apps.chrome.Main",
                "id": "1674153897828425"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 означає успіх, >0 означає невдачу"
                    },
                    "data": {
                      "type": "string",
                      "description": "Інформація про відповідь"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення відповіді: Повідомлення про помилку буде повернуто, коли код буде більшим за 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "data": "string",
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/rpa/template/market/page": {
      "post": {
        "operationId": "listMarketplaceRpaTemplatesLocal",
        "summary": "Отримати шаблони сторінок ринку",
        "deprecated": false,
        "description": "Виводить шаблони RPA з публічного маркетплейсу.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Шаблони глобальні, вони не обмежені командою.\n- **Локалізація**: заголовки та описи повертаються мовою запиту.\n- **Застосування**: `parameter` — це JSON-рядок, що описує змінні шаблону, і саме йому має відповідати `templateParameter` під час створення розкладу. Для шаблонів без змінних значення дорівнює null.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "pageNo": null,
                "pageSize": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "Назва шаблону ринку"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "Параметр шаблону JSON-рядок"
                              },
                              "description": {
                                "type": "string",
                                "description": "Опис шаблону ринку"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "сортувати"
                              },
                              "author": {
                                "type": "string",
                                "description": "автор"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "Час останнього оновлення"
                              }
                            },
                            "required": [
                              "parameter"
                            ]
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "author": "example-author",
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/template/personal/page": {
      "post": {
        "operationId": "listPersonalRpaTemplatesLocal",
        "summary": "Отримати особисті шаблони сторінок",
        "deprecated": false,
        "description": "Виводить шаблони RPA, створені вашою командою.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Вміст**: окреме сховище, не пов'язане з маркетплейсом, обмежене вашою командою, з простими одномовними заголовками.\n- **Пріоритет**: якщо ідентифікатор шаблону існує в обох сховищах, під час створення розкладу він розв'язується у шаблон вашої команди.\n- **Застосування**: `parameter` описує змінні шаблону точно так само, як у шаблонів маркетплейсу.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону"
                  },
                  "desc": {
                    "type": "string",
                    "description": "Опис шаблону"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "desc": "string",
                "pageNo": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "Назва шаблону ринку"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "Параметр шаблону JSON-рядок"
                              },
                              "description": {
                                "type": "string",
                                "description": "Опис шаблону ринку"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "сортувати"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "Час останнього оновлення"
                              }
                            }
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/task/page": {
      "post": {
        "operationId": "listCloudPhoneRpaTasksLocal",
        "summary": "Отримати список розкладів",
        "deprecated": false,
        "description": "Посторінково виводить розклади RPA команди.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: `taskState` кожного розкладу служить сигналом завершення для `/cloudphone/rpa/task/cancel`.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "Чи увімкнено розклад"
                  },
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Нечіткий пошук за назвою розкладу, описом і заголовком шаблону"
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Стан розкладу; 0: очікує виконання; 1: виконується; 2: виконання завершено 3: скасовано\n"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "за замовчуванням: 1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "за замовчуванням: 10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "taskState": 0,
                "searchKey": "daily login",
                "enabled": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Ідентифікатор розкладу"
                              },
                              "taskName": {
                                "type": "string",
                                "description": "Назва завдання запланувати"
                              },
                              "createMember": {
                                "type": "string",
                                "description": "Ім'я учасника"
                              },
                              "enabled": {
                                "type": "boolean",
                                "description": "Чи ввімкнено"
                              },
                              "endTime": {
                                "type": "string",
                                "description": "Час завершення завдання"
                              },
                              "failCount": {
                                "type": "integer",
                                "description": "Кількість невдалих виконань"
                              },
                              "handleTime": {
                                "type": "string",
                                "description": "Час початку виконання"
                              },
                              "notes": {
                                "type": "string",
                                "description": "нотатки до розкладу"
                              },
                              "scheduleConfig": {
                                "type": "string",
                                "description": "Налаштування розкладу завдань"
                              },
                              "successCount": {
                                "type": "integer",
                                "description": "Кількість успішних виконань"
                              },
                              "taskPreviewTimeTable": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "cloudPhoneId": {
                                      "type": "string",
                                      "description": "Ідентифікатор хмарного телефону"
                                    },
                                    "cloudPhoneName": {
                                      "type": "string",
                                      "description": "Назва хмарного телефону"
                                    },
                                    "times": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "description": "Список часу виконання"
                                    }
                                  }
                                }
                              },
                              "taskState": {
                                "type": "integer",
                                "description": "Стан завдання заплановано. 0: очікування; 1: виконання; 2: завершено; 3: скасовано"
                              },
                              "templateId": {
                                "type": "string",
                                "description": "Ідентифікатор шаблону"
                              },
                              "templateTitle": {
                                "type": "string",
                                "description": "Назва шаблону"
                              }
                            },
                            "required": [
                              "createMember"
                            ]
                          },
                          "description": "Список планів"
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "createMember": "string",
                        "enabled": true,
                        "endTime": "2026-09-01 12:00:00",
                        "failCount": 1,
                        "handleTime": "2026-09-01 12:00:00",
                        "notes": "string",
                        "scheduleConfig": "string",
                        "successCount": 1,
                        "taskPreviewTimeTable": [
                          {
                            "cloudPhoneId": "1673823102599682",
                            "cloudPhoneName": "example-name",
                            "times": [
                              "2026-09-01 12:00:00"
                            ]
                          }
                        ],
                        "taskState": 1,
                        "templateId": "1673823102599682",
                        "templateTitle": "example-title"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/task/save": {
      "post": {
        "operationId": "saveCloudPhoneRpaTaskLocal",
        "summary": "Створення розкладу",
        "deprecated": false,
        "description": "Зберегти заплановане завдання хмарного телефону.\n\ntemplateParameter Parameter Specification\n 1. __Parameter Source__\nParameter keys must be extracted from the `parameter` field returned by the following APIs:\n- Get market template pages\n- Get Personal template pages\n2.  __Data Structure__\n- Submit parameters in JSON object format: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Final parameter values must be deserialized according to business logic before use\n3. __Common Type Parameters__\nFor the following parameter types, pass values directly in the corresponding format:\n- string: `{\"name\": \"John\"}`\n- decimal / number: `{\"amount\": 100.50}`\n- boolean: `{\"enabled\": true}`\n4. __Media Type Parameters__\nFor media parameters such as image (pic) or video (video), in addition to basic information, a fixed key `\"__Extra__\"` must be included. Example format:\n```json\n{\n    \"__Extra__\": {\n        \"pic\": {\n            \"name\": \"pic_name\",\n            \"size\": 204800\n        },\n        \"video\": {\n            \"name\": \"video_name\",\n            \"size\": 204800000\n        }\n    },\n    \"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n    \"video\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n5. __Parameter Configuration Example__\nThe following example demonstrates how to configure the `templateParameter` parameter when saving a plan using a market template:\n- __Step 1: Retrieve Template Parameters__\nCall the Market Template API:\n`GET /api/cloudphone/rpa/template/market/page`\nExtract the `parameter` field from the response, for example:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Video\\\",\\\"type\\\":\\\"video\\\",\\\"required\\\":true,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":1,\\\"sizeLimit\\\":{\\\"value\\\":200,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"mp4\\\",\\\"mov\\\"]}},\\\"videoDescription\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Video Caption\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":1000},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":2}},\\\"coverUrl\\\":{\\\"type\\\":\\\"image\\\",\\\"extra\\\":{\\\"name\\\":\\\"Cover Image\\\",\\\"type\\\":\\\"image\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":3,\\\"sizeLimit\\\":{\\\"value\\\":5,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}},\\\"enableAIGC\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"AI Label\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":4}},\\\"productId\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Product ID only supports digits, with a maximum of 50 characters.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product Title\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Get Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Step 2: Build the Parameter JSON__\nConstruct the JSON object according to the parameter requirements:\n```json\n{\n  \"__Extra__\": {\n    \"videoDownloadUrl\": {\n      \"name\": \"video_name.mp4\",\n      \"size\": 204800000\n    }\n  },\n  \"videoDownloadUrl\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n- __Step 3: Escape the JSON String__\nConvert the JSON object into an escaped string format:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\\\"}\"\n```\n- __Step 4: API Call__\nPass the escaped string as the value of the `templateParameter` parameter to the target API.\n",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskName": {
                    "type": "string",
                    "description": "Назва завдання"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "ID шаблону"
                  },
                  "templateType": {
                    "type": "string",
                    "description": "Тип шаблону. PERSONAL:персональний; MARKET:маркетплейс"
                  },
                  "taskType": {
                    "type": "string",
                    "description": "Тип завдання. TEMPORARY або SCHEDULED"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Примітки плану"
                  },
                  "cloudPhoneConfigs": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "ID хмарного телефону"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "Час виконання завдання, часовий пояс UTC+0"
                        },
                        "templateParameter": {
                          "type": "string",
                          "description": "Параметри шаблону визначаються в персональних або маркетплейс-шаблонах. Параметри в шаблоні визначаються як:{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}} При запиті параметрів передається:{\"Test\":\"xxxx\"}"
                        }
                      },
                      "required": [
                        "cloudPhoneId",
                        "triggerTime",
                        "templateParameter"
                      ]
                    },
                    "description": "Колекція конфігурацій розкладу хмарних телефонів"
                  },
                  "scheduleConfig": {
                    "type": "object",
                    "properties": {
                      "endTime": {
                        "type": "string",
                        "description": "дата-час"
                      },
                      "scheduleType": {
                        "type": "string",
                        "description": "Тип розкладу. ONCE:одноразовий; DAILY:щоденний"
                      }
                    },
                    "required": [
                      "endTime",
                      "scheduleType"
                    ],
                    "description": "Конфігурація розкладу завдання"
                  }
                },
                "required": [
                  "cloudPhoneConfigs",
                  "scheduleConfig",
                  "taskName",
                  "taskType",
                  "templateId",
                  "templateType"
                ]
              },
              "example": {
                "cloudPhoneConfigs": [
                  {
                    "cloudPhoneId": "1661515884160372",
                    "triggerTime": "string",
                    "templateParameter": "string"
                  }
                ],
                "scheduleConfig": {
                  "endTime": "string",
                  "scheduleType": "string"
                },
                "taskName": "example-name",
                "taskType": "string",
                "templateId": "1661515884160372",
                "templateType": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу integer.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає помилку"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "ID трасування запиту"
                    },
                    "data": {
                      "type": "integer",
                      "description": "ID розкладу"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/api/cloudphone/rpa/onceTask/save": {
      "post": {
        "operationId": "saveCloudPhoneRpaOneTimeTaskLocal",
        "summary": "Створення одноразового розкладу",
        "deprecated": false,
        "description": "Зберегти хмарний телефон після запланованого завдання.\n\nСпецифікація параметра templateParameter\n1. __Джерело параметра__\nКлючі параметрів мають бути вилучені з поля `parameter`, що повертається такими API:\n- Отримати сторінки шаблонів ринку\n- Отримати сторінки персональних шаблонів\n2. __Структура даних__\n- Надсилати параметри у форматі об'єкта JSON: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Кінцеві значення параметрів мають бути десеріалізовані відповідно до бізнес-логіки перед використанням\n3. __Параметри загального типу__\nДля наступних типів параметрів передайте значення безпосередньо у відповідному форматі:\n- рядок: `{\"name\": \"John\"}`\n- десяткове / число: `{\"amount\": 100.50}`\n- логічний: `{\"enabled\": true}`\n4. __Параметри типу медіа__\nДля медіа-параметрів, таких як зображення (pic) або відео (video), окрім основної інформації, необхідно включити фіксований ключ `__Extra__\"`. Приклад формату:\n```json\n{\n\"__Extra__\": {\n\"pic\": {\n\"name\": \"pic_name\",\n\"size\": 204800\n},\n\"video\": {\n\"name\": \"video_name\",\n\"size\": 204800000\n}\n},\n\"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n\"video\": \"morelogin://cloudfile?ids=1,2\"\n}\n```\n5. __Приклад налаштування параметра__\nУ наступному прикладі показано, як налаштувати параметр `templateParameter` під час збереження плану за допомогою шаблону ринку:\n- __Крок 1: Отримання параметрів шаблону__\nВиклик API шаблону ринку:\n`GET /api/cloudphone/rpa/template/market/page`\nВитягніть поле `parameter` з відповіді, наприклад:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Відео\", \"тип\": \"відео\", \"обов'язкове\": \"правда\", \"значення за замовчуванням\": \"увімкнено\": \"false\", \"індекс\": 1, \"ліміт розміру\": \"значення\": 200, \"одиниця\": \"МБ\"}, \"тип формату\": [mp4\", \"mov\"]}}, \"опис відео\": \"тип\": \"рядок\", \"додаткове\": \"ім'я\": \"Відео\" Підпис\\\",\\\"тип\\\":\\\"рядок\\\",\\\"обов'язковий\\\":false,\\\"допустимий символ\\\":{\\\"увімкнено\\\":true,\\\"значення\\\":1000},\\\"багаторядковий\\\":{\\\"увімкнено\\\":true,\\\"значення\\\":3},\\\"значення за замовчуванням\\\":{\\\"увімкнено\\\":false},\\\"індекс\\\":2}},\\\"управління_обкладинкою\\\":{\\\"тип\\\":\\\"зображення\\\",\\\"додатковий\\\":{\\\"назва\\\":\\\"Обкладинка Зображення\\\", \"тип\\\":\\\"зображення\\\", \"обов'язкове\\\":false, \"значення за замовчуванням\\\":{\\\"увімкнено\\\":false}, \"індекс\\\":3, \"ліміт розміру\\\":{\\\"значення\\\":5, \"одиниця\\\":\\\"МБ\\\"}, \"тип формату\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}}, \"enableAIGC\\\":{\\\"тип\\\":\\\"логічне\\\",\\\"додаткове\\\":{\\\"назва\\\":\\\"Мітка ШІ\\\",\\\"тип\\\":\\\"логічне\\\",\\\"обов'язкове\\\":false, \"значення за замовчуванням\\\":{\\\"увімкнено\\\":false},\\\"індекс\\\":4}}, \"ідентифікатор_продукту\\\":{\\\"тип\\\":\\\"рядок\\\",\\\"додаткове\\\":{\\\"назва\\\":\\\"Продукт ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Ідентифікатор продукту підтримує лише цифри, максимум 50 символів.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Назва продукту\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Отримати Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Крок 2: Створення параметра JSON__\nСтворіть об'єкт JSON відповідно до вимог до параметра:\n```json\n{\n\"__Extra__\": {\n\"videoDownloadUrl\": {\n\"name\": \"video_name.mp4\",\n\"size\": 204800000\n}\n},\n\"videoDownloadUrl\": \"morelogin://cloudfile?ids=1,2\"\n}\n```\n- __Крок 3: Екранування рядка JSON__\nКонвертуйте об'єкт JSON у формат екранованого рядка:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"morelogin://cloudfile?ids=1,2\\\"}\"\n```\n- __Крок 4: Виклик API__\nПередайте екранований рядок як значення параметра `templateParameter` до цільового API.\n\nЗадокументовані бізнес-помилки: `33814`, `33818`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cloudPhoneId": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "scheduleName": {
                    "type": "string",
                    "description": "Назва розкладу"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "Ідентифікатор шаблону, персональний шаблон або ідентифікатор ринкового шаблону"
                  },
                  "templateParameter": {
                    "type": "string",
                    "description": "Параметри шаблону визначено в особистих шаблонах або шаблонах ринку. Параметри в шаблоні визначено так:{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}}. Під час запиту параметрів передається параметр:{\"Test\":\"xxxx\"}"
                  },
                  "description": {
                    "type": "string",
                    "description": "Опис розкладу"
                  }
                },
                "required": [
                  "cloudPhoneId",
                  "scheduleName",
                  "templateId"
                ]
              },
              "example": {
                "cloudPhoneId": "1678331966138097",
                "scheduleName": "test",
                "templateId": "1678347487160296",
                "templateParameter": "{\"keyword\": \"abc\"}",
                "description": "опис розкладу"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу integer.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "integer",
                      "description": "Ідентифікатор розкладу"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/task/cancel": {
      "post": {
        "operationId": "cancelCloudPhoneRpaTaskLocal",
        "summary": "Скасувати розклад",
        "deprecated": false,
        "description": "Скасовує розклад RPA і всі його незавершені запуски.\n- **Передумови**: розклад має існувати в команді. Завершений розклад скасувати неможливо; уже скасований повертає успіх і нічого не робить.\n- **Ефект**: розклад позначається скасованим **синхронно**, а для кожного запуску у стані очікування, виконання або перевірки в чергу ставиться запит на скасування.\n- **Завершення**: змішане. Стан розкладу читайте з `/cloudphone/rpa/task/page`, а окремі запуски підтверджуйте через `/cloudphone/rpa/subTask/page`: уже виконуваний запуск зупиняється асинхронно, а не відразу.\n- **Повтор**: ідемпотентний.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор плану"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/subTask/page": {
      "post": {
        "operationId": "listCloudPhoneRpaSubTasksLocal",
        "summary": "Запис виконання завдань запитів сторінок",
        "deprecated": false,
        "description": "Посторінково виводить окремі запуски RPA.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Значення статусу**: `taskState` дорівнює `0` очікування, `1` виконується, `2` у черзі, `3` успішно, `4` помилка, `5` скасовано. Очікування й чергу розрізняють за тим, чи перебуває запуск досі на своєму початковому часі спрацювання.\n- **Особливість пошуку**: пошук за заголовком шаблону спершу розв'язує заголовки мовою поточного запиту, тому заголовок, який не збігається з цією мовою, поверне порожню сторінку, а не всі запуски.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор завдання"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва завдання",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Стан плану; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор шаблону",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ідентифікатор хмарного телефону",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва хмарного телефону",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час початку завдання за часовим поясом UTC+0",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час завершення завдання за часовим поясом UTC+0",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ExecutionDTO"
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "taskState": 1,
                        "cloudPhoneId": "1673823102599682",
                        "cloudPhoneName": "example-name",
                        "templateName": "example-name",
                        "handleFailCode": "string",
                        "handleFailReason": "string",
                        "handleResult": 1,
                        "handleResultAttachment": "string",
                        "handleTime": "2026-09-01 12:00:00",
                        "endTime": "2026-09-01 12:00:00",
                        "powerOnTime": "2026-09-01 12:00:00",
                        "triggerNextTime": "2026-09-01 12:00:00",
                        "triggerTime": "2026-09-01 12:00:00",
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": "string",
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/subTask/detail/{id}": {
      "post": {
        "operationId": "getCloudPhoneRpaSubTaskDetailLocal",
        "summary": "Отримати виконання завдання",
        "deprecated": false,
        "description": "Повертає відомості про один запуск RPA.\n- **Передумови**: запуск має належати вашій команді. Виклик завершується помилкою, якщо запуску, його розкладу або його хмарного телефона більше не існує.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Значення статусу**: та сама шкала, що й у `/cloudphone/rpa/subTask/page`.\n- **Примітка**: дані проксі розв'язуються навіть для проксі, які з того часу було видалено, тому історичний запуск і далі показує, який проксі використовувався.",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Ідентифікатор завдання виконання",
            "required": true,
            "example": 1678919049331331,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор завдання"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва завдання",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Стан плану; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор шаблону",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ідентифікатор хмарного телефону",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва хмарного телефону",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час початку завдання за часовим поясом UTC+0",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час завершення завдання за часовим поясом UTC+0",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "taskId": null,
                "taskName": null,
                "taskState": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `id`, `taskName`, `taskState`, `cloudPhoneId`, `cloudPhoneName`, `templateName`, ….",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Ідентифікатор запису виконання"
                        },
                        "taskName": {
                          "type": "string",
                          "description": "Назва завдання запланувати"
                        },
                        "taskState": {
                          "type": "integer",
                          "description": "Стан розкладу; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати"
                        },
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "Ідентифікатор хмарного телефону"
                        },
                        "cloudPhoneName": {
                          "type": "string",
                          "description": "Назва хмарного телефону"
                        },
                        "templateName": {
                          "type": "string",
                          "description": "Назва шаблону"
                        },
                        "handleFailCode": {
                          "type": "string",
                          "description": "Код помилки завдання"
                        },
                        "handleFailReason": {
                          "type": "string",
                          "description": "Причина невдачі завдання"
                        },
                        "handleResult": {
                          "type": "integer",
                          "description": "Результат завдання. 0: невдача; 1: успішне виконання"
                        },
                        "handleResultAttachment": {
                          "type": "string",
                          "description": "Додаток до результату виконання завдання"
                        },
                        "handleTime": {
                          "type": "string",
                          "description": "Час виконання"
                        },
                        "endTime": {
                          "type": "string",
                          "description": "Час завершення завдання"
                        },
                        "powerOnTime": {
                          "type": "string",
                          "description": "Час увімкнення хмарного телефону"
                        },
                        "triggerNextTime": {
                          "type": "string",
                          "description": "Наступний запланований час запуску"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "Запланований час запуску"
                        },
                        "createDate": {
                          "type": "string",
                          "description": "Час створення"
                        },
                        "createMember": {
                          "type": "string",
                          "description": "Автор запису"
                        },
                        "updateDate": {
                          "type": "string",
                          "description": "Час останнього оновлення"
                        },
                        "updateMember": {
                          "type": "string",
                          "description": "Останній оновлювач"
                        }
                      }
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "id": "1673823102599682",
                    "taskName": "example-name",
                    "taskState": 1,
                    "cloudPhoneId": "1673823102599682",
                    "cloudPhoneName": "example-name",
                    "templateName": "example-name",
                    "handleFailCode": "string",
                    "handleFailReason": "string",
                    "handleResult": 1,
                    "handleResultAttachment": "string",
                    "handleTime": "2026-09-01 12:00:00",
                    "endTime": "2026-09-01 12:00:00",
                    "powerOnTime": "2026-09-01 12:00:00",
                    "triggerNextTime": "2026-09-01 12:00:00",
                    "triggerTime": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMember": "string",
                    "updateDate": "2026-09-01 12:00:00",
                    "updateMember": "2026-09-01 12:00:00"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/subTask/cancel/{id}": {
      "post": {
        "operationId": "cancelCloudPhoneRpaSubTaskLocal",
        "summary": "Скасувати виконання",
        "deprecated": false,
        "description": "Скасовує один запуск RPA, не торкаючись його розкладу.\n- **Передумови**: запис про запуск має існувати в команді. Завершений запуск скасувати неможливо; уже скасований повертає успіх і нічого не робить.\n- **Ефект**: **лише ставить запит на скасування в чергу — цей виклик не записує жодного стану.** Розклад продовжує працювати, наступні запуски не змінюються. Щоб зупинити сам розклад, використовуйте `/cloudphone/rpa/task/cancel`.\n- **Завершення**: асинхронне. Опитуйте `/cloudphone/rpa/subTask/page` або відомості про запуск, доки стан не стане «скасований». Уже виконуваний запуск не зупиняється миттєво.\n- **Повтор**: ідемпотентний; повтор лише знову ставить запит у чергу.",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор плану"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/touch/click": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Натискання",
        "description": "Натискає точку на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Координати**: `pos` має містити рівно два значення, `[x, y]`. **Вони не звіряються з роздільністю екрана** — точка за межами екрана передається Сервісу як є.\n- **Завершення**: синхронне. `data.status` дорівнює `finish`, коли жест виконано, або `pending`, коли Сервіс поставив його в чергу. Деякі моделі завжди повідомляють `finish`. Ендпоінта для опитування жесту у стані `pending` немає.\n- **Повтор**: дедуплікації немає. Два виклики — це два натискання, тому наосліп повторений запит після таймауту може дати подвійне натискання.\n- **Примітка**: `duration` тут приймається, але ігнорується; його читає лише довге натискання.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/doubleClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Подвійне натискання",
        "description": "Виконує подвійне натискання точки на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Ефект**: На деяких моделях це емулюється чотирма дотиками з фіксованими інтервалами 50/100/50 мс, тому ритм натискань не налаштовується. `duration` ігнорується.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`, як за одиночного натискання.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає подвійне натискання.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchDoubleClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/longClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Тривале натискання",
        "description": "Виконує довге натискання точки на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Значення**: `duration` — час утримання в мілісекундах, максимум 60000. **Нижньої межі немає**, тому відʼємне значення проходить валідацію й передається Сервісу. На деяких моделях за відсутності `duration` використовується 1000 мс.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає натискання.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchLongClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ],
                "duration": 2000
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/swipe": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Свайп",
        "description": "Виконує свайп між двома точками на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Значення**: `pos1` — початкова точка, `pos2` — кінцева, кожна рівно `[x, y]`. `duration` — час жесту в мілісекундах, максимум 60000; На деяких моделях за замовчуванням 300 мс, а траєкторія інтерполюється у пʼять проміжних подій переміщення.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає свайп.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchSwipe",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  540,
                  1500
                ],
                "pos2": [
                  540,
                  500
                ],
                "duration": 300
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/drag": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Перетягування",
        "description": "Виконує перетягування між двома точками на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Примітка**: **На деяких моделях це та сама реалізація, що й свайп** — служба передає перетягування прямо в процедуру свайпа, тому там їх неможливо розрізнити. В інших моделей є окрема дія перетягування.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає перетягування.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchDrag",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  200,
                  500
                ],
                "pos2": [
                  800,
                  500
                ],
                "duration": 500
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ResponseDataPageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Код статусу, 0 означає успіх",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Опис",
            "example": "Success"
          },
          "data": {
            "description": "Дані відповіді",
            "$ref": "#/components/schemas/PageResultCloudPhoneAppDto"
          }
        }
      },
      "PageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "description": "Загальна кількість записів",
            "example": "15"
          },
          "current": {
            "type": "string",
            "description": "Номер поточної сторінки",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "description": "Загальна кількість сторінок",
            "example": "2"
          },
          "dataList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CloudPhoneAppDto"
            },
            "description": "Список застосунків команди"
          }
        }
      },
      "CloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Ідентифікатор запису",
            "example": "123456"
          },
          "appName": {
            "type": "string",
            "description": "Назва застосунку",
            "example": "Facebook"
          },
          "packageName": {
            "type": "string",
            "description": "Ім'я пакета Android",
            "example": "com.facebook.katana"
          },
          "versionName": {
            "type": "string",
            "description": "Відображувана назва версії",
            "example": "450.0.0.1"
          },
          "versionCode": {
            "type": "string",
            "description": "Код версії",
            "example": "450000000"
          },
          "enabled": {
            "type": "boolean",
            "description": "Чи увімкнено додаток",
            "example": true
          },
          "desc": {
            "type": "string",
            "description": "Опис додатка",
            "example": "Social media application"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "Чи увімкнено ROOT-доступ для додатка",
            "example": false
          }
        }
      },
      "ApiAppRootOperateDto": {
        "type": "object",
        "required": [
          "id",
          "packageNames"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "12345678"
          },
          "packageNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Список імен пакетів застосунків, яким дозволено ROOT",
            "example": [
              "com.test"
            ]
          }
        }
      },
      "CloudPhoneSetProxyApiDto": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Список ідентифікаторів середовищ хмарних телефонів",
            "example": [
              "1558968155668507"
            ]
          },
          "uniqueIds": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "Список відображуваних порядкових номерів середовищ хмарних телефонів (використовується для звірки, якщо envIds не передано)",
            "example": [
              1001
            ]
          },
          "proxy": {
            "description": "Налаштування проксі",
            "$ref": "#/components/schemas/CloudPhoneProxyDto"
          }
        }
      },
      "CloudPhoneProxyDto": {
        "type": "object",
        "required": [
          "proxyIp",
          "proxyPort",
          "proxyProvider"
        ],
        "properties": {
          "proxyId": {
            "type": "string",
            "description": "Ідентифікатор конфігурації проксі (значення більше 0 означає повторне використання наявної конфігурації; порожнє значення або <=0 означає створення/оновлення проксі за наступними докладними параметрами)",
            "example": "10002"
          },
          "proxyIp": {
            "type": "string",
            "description": "IP-адреса проксі-сервера",
            "example": "192.168.1.100"
          },
          "proxyPort": {
            "type": "integer",
            "description": "Порт проксі-сервера",
            "minimum": 1,
            "maximum": 65535,
            "example": 8080
          },
          "proxyName": {
            "type": "string",
            "maxLength": 600,
            "description": "Назва/опис конфігурації проксі",
            "example": "test_proxy_01"
          },
          "proxyProvider": {
            "type": "integer",
            "description": "Тип проксі 0:http, 1:https, 2:socks5",
            "example": 2
          },
          "username": {
            "type": "string",
            "maxLength": 200,
            "description": "Ім'я користувача для автентифікації проксі",
            "example": "admin"
          },
          "password": {
            "type": "string",
            "maxLength": 100,
            "description": "Пароль для автентифікації проксі",
            "example": "pwd123"
          },
          "refreshUrl": {
            "type": "string",
            "description": "URL API для оновлення IP динамічного проксі",
            "example": "http://api.proxy.com/refresh"
          },
          "country": {
            "type": "string",
            "description": "Код країни розташування проксі (наприклад, CN, US)",
            "example": "US"
          },
          "state": {
            "type": "string",
            "description": "Область/штат розташування проксі",
            "example": "California"
          },
          "city": {
            "type": "string",
            "description": "Місто розташування проксі",
            "example": "Los Angeles"
          }
        }
      },
      "CloudPhoneEnableRootApiDTO": {
        "type": "object",
        "required": [
          "id",
          "enableRoot"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "1558968155668507"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "Чи вмикати глобальні ROOT-права на рівні системи",
            "example": true
          }
        }
      },
      "CloudPhoneProfile": {
        "type": "object",
        "properties": {
          "abnormalStatus": {
            "type": "integer",
            "description": "Аномальний статус 0 – Без аномалій 1 – Неактивовано 2 – Поза контрактом 3 – Перепродано 4 – Деактивовано"
          },
          "adbInfo": {
            "description": "Дані підключення ADB",
            "$ref": "#/components/schemas/AdbInfo"
          },
          "billingType": {
            "type": "integer",
            "description": "Оплата: 0 – безкоштовно, 1 – гнучка підписка, 2 – щомісячна"
          },
          "createDate": {
            "description": "Час створення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMember": {
            "description": "Ідентифікатор учасника-створювача",
            "type": "integer"
          },
          "createMemberName": {
            "description": "Ім'я учасника-створювача",
            "type": "string"
          },
          "enableAdb": {
            "description": "Чи вмикати ADB",
            "type": "boolean"
          },
          "envName": {
            "type": "string",
            "description": "Назва хмарного телефону"
          },
          "envRemark": {
            "type": "string",
            "description": "Примітки до профілю"
          },
          "envStatus": {
            "type": "integer",
            "description": "Стан профілю: 0 – Новий 1 – Створення не вдалося 2 – Зупинено 3 – Запуск 4 – Старт 5 – Виконується скидання"
          },
          "expireTime": {
            "type": "string",
            "description": "термін дії"
          },
          "groupId": {
            "description": "Ідентифікатор групи",
            "type": "string"
          },
          "groupName": {
            "description": "Назва групи. Null, якщо хмарний телефон не належить до жодної групи",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "ID хмарного телефона",
            "type": "string"
          },
          "androidId": {
            "type": "string",
            "description": "android id хмарного телефона"
          },
          "gaid": {
            "type": "string",
            "description": "gaid хмарного телефону"
          },
          "lastConnectDate": {
            "description": "Час останнього підключення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "description": "Ідентифікатор учасника останнього підключення",
            "type": "string"
          },
          "lastConnectMemberName": {
            "description": "Ім'я учасника останнього підключення",
            "type": "string"
          },
          "lastStartDate": {
            "description": "Час останнього запуску",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastStartMemberId": {
            "description": "Ідентифікатор учасника останнього запуску",
            "type": "string"
          },
          "lastStartMemberName": {
            "description": "Ім'я учасника останнього запуску",
            "type": "string"
          },
          "proxy": {
            "description": "Налаштування проксі",
            "$ref": "#/components/schemas/ProxyInfo"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "Стан проксі-сервера: 0 – Не виявлено 1 – Виявлення 2 – Виявлення не вдалося 3 – Виявлення успішне"
          },
          "supportAdb": {
            "description": "Чи підтримується ADB: 0 = ні, 1 = так",
            "type": "boolean"
          },
          "tagInfos": {
            "description": "Відомості про теги. Порожній масив, якщо теги не призначено",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Ідентифікатор тегу",
                  "type": "string"
                },
                "tagName": {
                  "description": "Назва тегу",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "updateDate": {
            "description": "Час оновлення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "updateMember": {
            "description": "Ідентифікатор учасника, який виконав оновлення",
            "type": "integer"
          }
        }
      },
      "AdbInfo": {
        "type": "object",
        "description": "Дані ADB доступні лише коли телефон увімкнений (envStatus >= 4); їх неможливо запитати, коли він вимкнений або завантажується",
        "properties": {
          "adbIp": {
            "type": "string",
            "description": "IP-адреса adb"
          },
          "adbPassword": {
            "type": "string",
            "description": "пароль підключення adb"
          },
          "adbPort": {
            "type": "string",
            "description": "порт adb"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "Команда підключення ADB через SSH-тунель"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Термін дії ADB-підключення"
          },
          "remark": {
            "type": "string",
            "description": "Інформація про примітки щодо несправностей"
          },
          "success": {
            "type": "integer",
            "description": "Успішно отримано 1=Так 0=Ні"
          }
        },
        "required": [
          "adbIp",
          "adbPassword",
          "adbPort",
          "remark",
          "success"
        ]
      },
      "ProxyInfo": {
        "type": "object",
        "properties": {
          "country": {
            "description": "Країна",
            "type": "string"
          },
          "countryCode": {
            "description": "Код країни",
            "type": "string"
          },
          "createDate": {
            "description": "Час створення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "delFlag": {
            "type": "integer",
            "description": "1 – видалено 2 – не видалено"
          },
          "expiryTime": {
            "description": "Час завершення дії",
            "type": "string"
          },
          "exportIp": {
            "description": "Вихідна IP-адреса",
            "type": "string"
          },
          "groupId": {
            "description": "Ідентифікатор групи",
            "type": "string"
          },
          "id": {
            "description": "ID",
            "type": "string"
          },
          "providerCode": {
            "description": "Код сервісу",
            "type": "string"
          },
          "proxyAreaCode": {
            "description": "Код зони розташування проксі",
            "type": "string"
          },
          "proxyCatagoryType": {
            "type": "integer",
            "description": "Тип проксі-сервера: 0: група сайтів 1: хмарна платформа 2: власна IP-адреса 3: VPS 4: віртуальна машина"
          },
          "proxyCheckStatus": {
            "type": "integer",
            "description": "Стан виявлення: 0: очікує виявлення 1: успішне виявлення 2: невдача виявлення 3: невідома помилка"
          },
          "proxyInfo": {
            "description": "Рядок із даними проксі",
            "type": "string"
          },
          "proxyIp": {
            "description": "IP-адреса проксі-сервера",
            "type": "string"
          },
          "proxyName": {
            "description": "Назва конфігурації проксі",
            "type": "string"
          },
          "proxyPort": {
            "description": "Порт проксі-сервера",
            "type": "integer"
          },
          "proxyRegionCode": {
            "description": "Код регіону розташування проксі",
            "type": "string"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "0 – Звичайний 1 – Очікує розподілу 2 – Оновлення 3 – Термін дії минув"
          },
          "proxySub": {
            "description": "Дані підписки проксі",
            "$ref": "#/components/schemas/ProxySubscription"
          },
          "proxyType": {
            "type": "integer",
            "description": "Тип проксі-сервера: 0-http 1-https 2-socks5 4-Oxylabs 5-Proxys.io 6-GeoSurf 9-Oxylabsauto 10-Trogan 11-Shadowsocks 12-vmess"
          },
          "proxyTypeCode": {
            "description": "Код типу протоколу проксі",
            "type": "string"
          },
          "regionKey": {
            "description": "Ключ регіону хмарної платформи",
            "type": "string"
          },
          "releaseTime": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
            "description": "Час випуску: час видалення, якщо видалено, час закінчення терміну дії, якщо минув"
          },
          "uniqueId": {
            "description": "ID порядку відображення",
            "type": "integer"
          }
        },
        "required": [
          "country",
          "countryCode",
          "createDate",
          "delFlag",
          "expiryTime",
          "exportIp",
          "groupId",
          "id",
          "providerCode",
          "proxyAreaCode",
          "proxyCatagoryType",
          "proxyCheckStatus",
          "proxyInfo",
          "proxyIp",
          "proxyName",
          "proxyPort",
          "proxyRegionCode",
          "proxyStatus",
          "proxySub",
          "proxyType",
          "proxyTypeCode",
          "regionKey",
          "releaseTime",
          "uniqueId"
        ]
      },
      "ProxySubscription": {
        "type": "object",
        "properties": {
          "activeRecordId": {
            "description": "ID активного запису підписки",
            "type": "string"
          },
          "businessId": {
            "description": "Бізнес-ID сервісу проксі",
            "type": "string"
          },
          "createMember": {
            "description": "Ідентифікатор учасника-створювача",
            "type": "integer"
          },
          "endTime": {
            "description": "Час завершення",
            "type": "string"
          },
          "id": {
            "description": "ID підписки",
            "type": "string"
          },
          "nextBillingTime": {
            "description": "Час наступного списання або платежу",
            "type": "string"
          },
          "startTime": {
            "description": "Початок терміну дії",
            "type": "string"
          },
          "subPayMethod": {
            "description": "Спосіб оплати підписки",
            "type": "string"
          },
          "subStatus": {
            "type": "integer",
            "description": "Статус підписки: 0 – Очікує розгляду 1 – Підписано 2 – Скасовано"
          },
          "subType": {
            "type": "integer",
            "description": "Тип підписки: 1 агент, 2 пакети"
          },
          "teamId": {
            "description": "ID команди",
            "type": "string"
          }
        },
        "required": [
          "activeRecordId",
          "businessId",
          "createMember",
          "endTime",
          "id",
          "nextBillingTime",
          "startTime",
          "subPayMethod",
          "subStatus",
          "subType",
          "teamId"
        ]
      },
      "CloudPhoneDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефона"
          },
          "androidId": {
            "type": "string",
            "description": "android id хмарного телефона"
          },
          "gaid": {
            "type": "string",
            "description": "gaid хмарного телефону"
          },
          "envName": {
            "type": "string",
            "description": "Назва хмарного телефона"
          },
          "groupId": {
            "description": "Ідентифікатор групи",
            "type": "string"
          },
          "groupName": {
            "description": "Назва групи. Null, якщо хмарний телефон не належить до жодної групи",
            "type": [
              "string",
              "null"
            ]
          },
          "skuId": {
            "description": "ID SKU продукту",
            "type": "string"
          },
          "tagInfos": {
            "description": "Відомості про теги. Порожній масив, якщо теги не призначено",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Ідентифікатор тегу",
                  "type": "string"
                },
                "tagName": {
                  "description": "Назва тегу",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "billingType": {
            "description": "Тип тарифікації: 1 = похвилинна оплата (на вимогу), 2 = місячна",
            "type": "integer"
          },
          "proxyStatus": {
            "description": "Статус проксі: 0 = не перевірено, 1 = перевіряється, 2 = перевірка не вдалася, 3 = перевірка успішна",
            "type": "integer"
          },
          "settings": {
            "description": "Розширені налаштування відбитка",
            "type": "object",
            "properties": {
              "automaticGeo": {
                "type": "boolean"
              },
              "automaticLocation": {
                "type": "boolean"
              },
              "automaticLanguage": {
                "type": "boolean"
              },
              "longitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "latitude": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "automaticGeo",
              "automaticLocation",
              "automaticLanguage",
              "longitude",
              "latitude"
            ]
          },
          "device": {
            "description": "Дані про обладнання пристрою",
            "type": "object",
            "properties": {
              "server": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "countryName": {
                "type": "string"
              },
              "rom": {
                "type": "integer"
              },
              "wifiBssid": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "bluetoothMac": {
                "type": "string"
              }
            },
            "required": [
              "server",
              "countryName",
              "rom",
              "wifiBssid",
              "bluetoothMac"
            ]
          },
          "proxy": {
            "description": "Налаштування проксі",
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "proxyName": {
                "type": "string"
              },
              "proxyIp": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "proxyName",
              "proxyIp"
            ]
          },
          "lastStartMemberId": {
            "description": "Ідентифікатор учасника останнього запуску",
            "type": "string"
          },
          "lastStartMemberName": {
            "description": "Ім'я учасника останнього запуску",
            "type": [
              "string",
              "null"
            ]
          },
          "lastStartDate": {
            "description": "Час останнього запуску",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "description": "Ідентифікатор учасника останнього підключення",
            "type": "string"
          },
          "lastConnectMemberName": {
            "description": "Ім'я учасника останнього підключення",
            "type": [
              "string",
              "null"
            ]
          },
          "lastConnectDate": {
            "description": "Час останнього підключення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "envStatus": {
            "description": "Статус середовища: 0 = нове, 1 = помилка створення, 2 = вимкнено, 3 = завантажується, 4 = увімкнено, 5 = скидається, 6 = перезавантажується, 7 = виконується зміна пристрою в один клік",
            "type": "integer"
          },
          "abnormalStatus": {
            "description": "Аварійний статус: 0 = норма, 1 = не активований, 2 = заборгованість, 3 = перепроданий, 4 = деактивований",
            "type": "integer"
          },
          "expireTime": {
            "description": "Час завершення дії",
            "type": "string"
          },
          "envRemark": {
            "description": "Примітка до середовища",
            "type": "string"
          },
          "createMember": {
            "description": "Ідентифікатор учасника-створювача",
            "type": "string"
          },
          "updateMember": {
            "description": "Ідентифікатор учасника, який виконав оновлення",
            "type": "string"
          },
          "updateDate": {
            "description": "Час оновлення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createDate": {
            "description": "Час створення",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMemberName": {
            "description": "Ім'я учасника-створювача",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "envName",
          "groupId",
          "skuId",
          "tagInfos",
          "billingType",
          "proxyStatus",
          "settings",
          "device",
          "proxy",
          "lastStartMemberId",
          "lastStartMemberName",
          "lastStartDate",
          "lastConnectMemberId",
          "lastConnectMemberName",
          "lastConnectDate",
          "envStatus",
          "abnormalStatus",
          "expireTime",
          "envRemark",
          "createMember",
          "updateMember",
          "updateDate",
          "createDate",
          "createMemberName"
        ]
      },
      "ExecutionDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Ідентифікатор запису виконання"
          },
          "taskName": {
            "type": "string",
            "description": "Назва завдання запланувати"
          },
          "taskState": {
            "type": "integer",
            "description": "Стан розкладу; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати"
          },
          "cloudPhoneId": {
            "type": "string",
            "description": "Ідентифікатор хмарного телефону"
          },
          "cloudPhoneName": {
            "type": "string",
            "description": "Назва хмарного телефону"
          },
          "templateName": {
            "type": "string",
            "description": "Назва шаблону"
          },
          "handleFailCode": {
            "type": "string",
            "description": "Код помилки завдання"
          },
          "handleFailReason": {
            "type": "string",
            "description": "Причина невдачі завдання"
          },
          "handleResult": {
            "type": "integer",
            "description": "Результат завдання. 0: невдача; 1: успішне виконання"
          },
          "handleResultAttachment": {
            "type": "string",
            "description": "Додаток до результату виконання завдання"
          },
          "handleTime": {
            "type": "string",
            "description": "Час виконання"
          },
          "endTime": {
            "type": "string",
            "description": "Час завершення завдання"
          },
          "powerOnTime": {
            "type": "string",
            "description": "Час увімкнення хмарного телефону"
          },
          "triggerNextTime": {
            "type": "string",
            "description": "Наступний запланований час запуску"
          },
          "triggerTime": {
            "type": "string",
            "description": "Запланований час запуску"
          },
          "createDate": {
            "type": "string",
            "description": "Час створення"
          },
          "createMember": {
            "type": "string",
            "description": "Автор запису"
          },
          "updateDate": {
            "type": "string",
            "description": "Час останнього оновлення"
          },
          "updateMember": {
            "type": "string",
            "description": "Останній оновлювач"
          }
        }
      },
      "ApiBatchAdbInfoDto": {
        "type": "object",
        "required": [
          "envIds"
        ],
        "properties": {
          "envIds": {
            "type": "array",
            "description": "Список ідентифікаторів середовищ, максимум 200",
            "maxItems": 200,
            "minItems": 1,
            "items": {
              "type": "string"
            },
            "example": [
              "1674380838117474",
              "1675787900043353"
            ]
          }
        }
      },
      "ApiBatchAdbInfoResultDto": {
        "type": "object",
        "description": "Результат пакетного запиту ADB-інформації",
        "properties": {
          "id": {
            "type": "string",
            "description": "Ідентифікатор середовища"
          },
          "supportAdb": {
            "type": "boolean",
            "description": "Чи підтримується ADB"
          },
          "enableAdb": {
            "type": "boolean",
            "description": "Увімкнення ADB: 0 = вимкнено, 1 = увімкнено"
          },
          "envStatus": {
            "type": "integer",
            "description": "Статус середовища:\n- 0: нове\n- 1: помилка створення\n- 2: вимкнено\n- 3: запускається\n- 4: увімкнено\n- 5: скидається\n- 6: перезапускається\n- 7: виконується зміна пристрою одним клацанням"
          },
          "adbIp": {
            "type": [
              "string",
              "null"
            ],
            "description": "IP-адреса ADB-підключення"
          },
          "adbPassword": {
            "type": [
              "string",
              "null"
            ],
            "description": "Пароль ADB-підключення"
          },
          "adbPort": {
            "type": [
              "string",
              "null"
            ],
            "description": "Порт ADB-підключення"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "Команда підключення ADB через SSH-тунель"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Термін дії ADB-підключення"
          },
          "remark": {
            "type": [
              "string",
              "null"
            ],
            "description": "Примітка. Якщо ADB-інформацію отримати не вдалося, зазначається причина:\n- середовище не існує\n- середовище не увімкнено, ADB-інформацію запитати неможливо\n- це середовище не підтримує ADB\n- не вдалося отримати ADB-інформацію"
          }
        }
      },
      "ResponseDataListApiBatchAdbInfoResultDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Код відповіді, 0 означає успіх",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Повідомлення відповіді",
            "example": "success"
          },
          "data": {
            "type": "array",
            "description": "Список ADB-інформації в тому самому порядку, що й запитані envIds",
            "items": {
              "$ref": "#/components/schemas/ApiBatchAdbInfoResultDto"
            }
          }
        }
      },
      "TouchClickRequest": {
        "type": "object",
        "required": [
          "id",
          "pos"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "1558968155668507"
          },
          "pos": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Координати натискання [x, y]. Система координат використовує лівий верхній кут екрана як початок координат (0, 0).",
            "example": [
              540,
              960
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Тривалість натискання в мілісекундах (використовується для тривалого натискання). Якщо не вказано, використовується значення за замовчуванням.",
            "example": 2000
          }
        }
      },
      "TouchSwipeRequest": {
        "type": "object",
        "required": [
          "id",
          "pos1",
          "pos2"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "1558968155668507"
          },
          "pos1": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Початкові координати [x, y]",
            "example": [
              540,
              1500
            ]
          },
          "pos2": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Кінцеві координати [x, y]",
            "example": [
              540,
              500
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Тривалість свайпу/перетягування в мілісекундах. Більше значення призводить до повільнішої дії.",
            "example": 300
          }
        }
      },
      "TouchResultResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Код статусу, 0 означає успіх",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Повідомлення відповіді",
            "example": "success"
          },
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "description": "Статус виконання",
                "example": "finish"
              }
            }
          }
        }
      },
      "ResponseEnvelopeBase": {
        "type": "object",
        "required": [
          "code",
          "msg",
          "requestId"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Business result code; `0` indicates success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message; null when successful",
            "example": null
          },
          "requestId": {
            "type": "string",
            "description": "Request ID for troubleshooting",
            "example": "1d4f3ea968664593860b94b35d4ebf5e"
          }
        }
      },
      "MonthlyCloudPhoneSkuPrice": {
        "type": "object",
        "required": [
          "price",
          "period",
          "periodUnit"
        ],
        "properties": {
          "price": {
            "type": "integer",
            "minimum": 0,
            "description": "Configured price in US cents"
          },
          "period": {
            "type": "integer",
            "description": "Billing-period count returned by the product service"
          },
          "periodUnit": {
            "type": "string",
            "description": "Localized billing-period unit returned by the product service"
          },
          "priceDesc": {
            "type": [
              "string",
              "null"
            ],
            "description": "Localized display price, when configured"
          }
        }
      },
      "MonthlyCloudPhoneSku": {
        "type": "object",
        "required": [
          "skuId",
          "skuName",
          "prices"
        ],
        "properties": {
          "skuId": {
            "type": "string",
            "description": "Monthly Cloud Phone product ID"
          },
          "skuName": {
            "type": "string",
            "description": "Product name returned in the product-service language"
          },
          "cloudPhoneAndroidVersion": {
            "type": [
              "string",
              "null"
            ],
            "description": "Android version, or null when the product has no configured value"
          },
          "cloudPhoneStorage": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Storage capacity in GB, or null when the product has no configured value"
          },
          "prices": {
            "type": "array",
            "minItems": 1,
            "description": "Active monthly price configurations",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneSkuPrice"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "description": "One to ten distinct positive Cloud Phone IDs, encoded as strings to preserve 64-bit precision",
            "items": {
              "type": "string",
              "pattern": "^[1-9][0-9]*$"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivationResult": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVATED",
              "FAILED",
              "UNKNOWN"
            ],
            "description": "Activation result"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]+$",
            "description": "Unix time in milliseconds; present for a successful activation"
          },
          "errorCode": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Business error code for a failed item"
          }
        }
      },
      "MonthlyCloudPhoneActivationData": {
        "type": "object",
        "required": [
          "orderId",
          "orderStatus",
          "results"
        ],
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Paid balance-order ID"
          },
          "orderStatus": {
            "type": "integer",
            "enum": [
              1
            ],
            "description": "Order status; 1 means completed"
          },
          "results": {
            "type": "array",
            "description": "One result per requested ID, in request order",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneActivationResult"
            }
          }
        }
      },
      "CloudPhoneLiveStartRequest": {
        "type": "object",
        "required": [
          "phoneId",
          "fileId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          },
          "fileId": {
            "type": "string",
            "description": "ID of an uploaded MP4 live-streaming file (`uploadType=2`)",
            "example": "820000000000000001"
          }
        }
      },
      "CloudPhoneLivePhoneRequest": {
        "type": "object",
        "required": [
          "phoneId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          }
        }
      }
    },
    "securitySchemes": {},
    "responses": {
      "BalanceResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "balance",
                        "remainingDuration",
                        "remainingConcurrency"
                      ],
                      "properties": {
                        "balance": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Available wallet balance in cents"
                        },
                        "remainingDuration": {
                          "type": "string",
                          "pattern": "^[0-9]+$",
                          "description": "Remaining cloud phone duration in minutes, serialized as a numeric string"
                        },
                        "remainingConcurrency": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Remaining team-level cloud phone concurrency"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "balance": 12500,
                "remainingDuration": "120",
                "remainingConcurrency": 3
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "MonthlyCloudPhoneSkusResponse": {
        "description": "Request processed; `data` is an empty array when no monthly product is available",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonthlyCloudPhoneSku"
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": [
                {
                  "skuId": "10015",
                  "skuName": "Android 14",
                  "cloudPhoneAndroidVersion": "Android 14",
                  "cloudPhoneStorage": 64,
                  "prices": [
                    {
                      "price": 2500,
                      "period": 30,
                      "periodUnit": "days",
                      "priceDesc": "$25/30 days"
                    }
                  ]
                }
              ],
              "requestId": "36d574df5b9e41b5b3c796133ff5a079"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateResponse": {
        "description": "Request processed; inspect `code`, and inspect `data.results` when returned",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MonthlyCloudPhoneActivationData"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "orderId": "1724032801202461",
                "orderStatus": 1,
                "results": [
                  {
                    "id": "1724032706822188",
                    "status": "ACTIVATED",
                    "expireTime": "1791103955843",
                    "errorCode": null
                  }
                ]
              },
              "requestId": "db5e04c2eb804cdfb96b1469c7379bbc"
            }
          }
        }
      },
      "CloudPhoneLiveBooleanResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "boolean",
                      "description": "Whether the live-streaming operation succeeded"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": true,
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "CloudPhoneLiveStatusResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "liveStatus": {
                          "type": "integer",
                          "enum": [
                            0,
                            1
                          ],
                          "description": "Live status (`0` = stopped, `1` = running)"
                        },
                        "writeFileId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file ID, when available"
                        },
                        "liveFilePath": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file path or URL, when available"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "liveStatus": 1,
                "writeFileId": "820000000000000001",
                "liveFilePath": null
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "http://127.0.0.1:40000",
      "description": "Локальна точка доступу MoreLogin"
    }
  ],
  "security": []
}